Datetime 设置日期时间毫秒精度-elixir
我正在尝试获取一个在次秒部分只有3位数字的日期时间。Datetime 设置日期时间毫秒精度-elixir,datetime,elixir,timex,Datetime,Elixir,Timex,我正在尝试获取一个在次秒部分只有3位数字的日期时间。 使用timex,我得到以下结果: iex(12)> {:ok, date} = Timex.format(Timex.shift(Timex.local, days: 16), "{ISO:Extended}") {:ok, "2017-04-22T09:00:44.403879+03:00"} 我怎样才能得到这样的东西: {:好的,2017-04-22T09:00:44。403+03:00} DateTime有一个微秒字段,它是
使用timex,我得到以下结果:
iex(12)> {:ok, date} = Timex.format(Timex.shift(Timex.local, days: 16), "{ISO:Extended}")
{:ok, "2017-04-22T09:00:44.403879+03:00"}
我怎样才能得到这样的东西:{:好的,2017-04-22T09:00:44。403+03:00}
DateTime
有一个微秒
字段,它是一个包含值和精度的元组。如果将精度更改为3
,则在微秒输出中将获得3位数字。我在Timex中找不到任何可以执行此操作的函数,但您可以手动修改该值:
iex(1)> dt = %{microsecond: {us, precision}} = Timex.now
#<DateTime(2017-04-06T08:26:24.041004Z Etc/UTC)>
iex(2)> precision
6
iex(3)> dt2 = %{dt | microsecond: {us, 3}}
#<DateTime(2017-04-06T08:26:24.041Z Etc/UTC)>
iex(4)> dt2 |> Timex.format!("{ISO:Extended}")
"2017-04-06T08:26:24.041+00:00"
iex(1)>dt=%{微秒:{us,precision}}=Timex.now
#
iex(2)>精度
6.
iex(3)>dt2=%{dt|微秒:{us,3}}
#
iex(4)>dt2 |>Timex.format!(“{ISO:Extended}”)
“2017-04-06T08:26:24.041+00:00”
自Elixir 1.6.0以来,现在模块Time、DateTime和NativeDateTime上出现了截断/2功能,用于:
iex(1)> dt = Timex.now()
#DateTime<2018-02-16 19:03:51.430946Z>
iex(2)> dt2 = DateTime.truncate(dt, :millisecond)
#DateTime<2018-02-16 19:03:51.430Z>
iex(1)>dt=Timex.now()
#日期时间
iex(2)>dt2=DateTime.truncate(dt,:毫秒)
#日期时间
您是否尝试使用格式字符串,例如:{:ok,date}=Timex.format(Timex.shift(Timex.local,days:16),“%FT%T%:z”,:strftime)
@ZubairNabi,这给了我一个没有毫秒的结果,我无法找出正确的格式字符串来获得3毫秒的数字这是一个好主意,但是您应该将微秒值us
归零。我遇到了一个问题,格式化的时间戳的毫秒部分左移了一位。例如,如果dt
是#DateTime
,dt.微秒
是{71819,6}
。做%{dt |微秒:{71819,3}}}>Timex.format(“{ISO:Extended:Z}”)
给出“2015-11-02T03:08:57.718Z”
。请注意,毫秒部分现在是718,而不是071。要解决此问题,请将值设置为零:%{dt|微秒:{“071819”,3}}}|>Timex.format!(“{ISO:Extended:Z}”)
“2015-11-02T03:08:57.071Z”@GordonZheng我认为正确的解决方案是将us
除以10^
,例如6->3将是%{dt微秒:{div(us,1000),3}}}>Timex.format({ISO Extended:Z}”)
。既然这样,我猜我的答案和你的评论都是错误的-us
的值应该不超过10^精度
。啊,这是一个更好的解决方案。谢谢@Dogbert!