首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用药剂处理DateTime精度>6

使用药剂处理DateTime精度>6
EN

Stack Overflow用户
提问于 2017-12-04 22:22:21
回答 1查看 147关注 0票数 1

我的代码中有这样的函数:

代码语言:javascript
运行
复制
  defp to_date({year, month, day}), do: NaiveDateTime.from_erl!({{year, month, day}, {0, 0, 0}}, {0, 6}) |> NaiveDateTime.to_string()
  defp to_date({{year, month, day}, {hour, min, sec, msec}}) when msec < 1000000,
    do: NaiveDateTime.from_erl!({{year, month, day}, {hour, min, sec}}, {msec, 6}) |> NaiveDateTime.to_string()

  defp to_date(x), do: x

msec > 6-digits的时候你会如何处理案件。

使用Tds库从SQLServer datetime2(7)中提取数据工作得很好:

代码语言:javascript
运行
复制
iex(45)> r = Tds.Connection.query(:RMASDB, "select * from users where user_id = 1" , [])
{:ok,
 %Tds.Result{columns: ["user_id", "name", "email", "mobiles", "password", "roles", "active", "reset_required", "last_login", "has_picture", "last_modified", "last_modified_by"], command: nil, num_rows: 1,
  rows: [[1, "Charles Okwuagwu", "charleso@mydomain.com", "mobile1, mobile2", "/eNvuOyr5N6HxgYdz3fK7A==|QHx/sOa3Se0C3ZeLSNtT97SCsuWL11SJeLykms7faGY=", "Administrator", true, false,
    {{2017, 11, 30}, {18, 37, 26, 2690120}}, true, {{2017, 11, 30}, {0, 0, 0, 0}}, 1]]}}

但是用下面的代码处理日期会引发这个异常:

代码语言:javascript
运行
复制
iex(46)> DB.get(DB.Users, "select * from users where user_id = 1")                      
** (ArgumentError) cannot convert {{2017, 11, 30}, {18, 37, 26}} to naive datetime, reason: :invalid_time
    (elixir) lib/calendar/naive_datetime.ex:549: NaiveDateTime.from_erl!/2
    (rmas) lib/db.ex:34: DB.to_date/1
    (elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
    (elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
    (rmas) lib/db.ex:26: anonymous fn/3 in DB._objects/3
    (elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
    (rmas) lib/db.ex:17: DB.get/3

源数据-值是:{{2017, 11, 30}, {18, 37, 26, 2690120}}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-05 04:18:36

datetime2(7)字段以十分之一微秒的精度存储.NaiveDateTime只支持微秒的精度,因此可以将该值除以10得到微秒,并使用该值:

代码语言:javascript
运行
复制
defp to_date({{year, month, day}, {hour, min, sec, seven}}),
  do: NaiveDateTime.from_erl!({{year, month, day}, {hour, min, sec}}, {div(seven, 10), 6}) |> NaiveDateTime.to_string()

我们使用div而不是/进行除法,以便结果是整数而不是浮点数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47642961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档