Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 设置日期时间毫秒精度-elixir_Datetime_Elixir_Timex - Fatal编程技术网

Datetime 设置日期时间毫秒精度-elixir

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有一个微秒字段,它是

我正在尝试获取一个在次秒部分只有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
有一个
微秒
字段,它是一个包含值和精度的元组。如果将精度更改为
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以来,现在模块TimeDateTimeNativeDateTime上出现了截断/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!