日期格式命令

日期格式命令

我需要在毫秒末尾附加以下格式的时区值,示例如下:

2018-01-07T14:30:03.832-0700

我需要 Unix 命令来获取所需的格式。

答案1

使用 GNU 或 ast-open date

$ date +%FT%T.%3N%z
2018-07-01T13:44:07.043+0100

(GNU date(不是 GNU strftime)还支持%:zfor +01:00%::zfor +01:00:001 和%:::zfor +01// +01:30(根据需要+01:30:01添加多个:xx))。

ksh93

$ printf "%(%FT%T.%3N%z)T\n"
2018-07-01T13:44:07.043+0100

zsh

$ zmodload zsh/datetime
$ echo $EPOCHREALTIME | IFS=. read s ns
$ strftime %FT%T.$ns[1,3]%z $s
2018-07-01T13:44:07.043+0100

可移植(最困难的部分是这里的毫秒,而不是您可以%z在包装 standard²strftime()函数的任何内容中获得的时区偏移量,例如date),您可以尝试perl

perl -MTime::HiRes=gettimeofday -MPOSIX -le '
  ($s, $us) = gettimeofday;
  $ms = sprintf("%03d", $us/1000);
  print strftime "%FT%T.$ms%z", localtime $s'

1 是的,TZ 偏移量可以是非零秒,就像TZ='OFF00:00:01' date '+%Z %::z'.对于现实生活中的时区,这只适用于遥远(Unix 之前)时间的日期。参见例如TZ=Europe/Amsterdam date -d '90 years ago' '+%F %::z'

² 但请注意,虽然%F%z是在 POSIX 中指定的strftime()(至少从 SUSv3 起),但它们不在date实用程序的 POSIX 规范中(但我不知道当前有哪个系统date不支持它们)

答案2

添加%z到您的时间格式。例子:

$ date
Sun Jul  1 04:55:02 EDT 2018
$ date '+%z'
-0400
$

答案3

可以使用 GNU 日期获取 ISO8601 时间格式:

$ date -Iseconds
2018-07-01T06:57:25-0700

但是,要获取以毫秒为单位的时间,您需要指定详细的字符串。尝试:

$ date +'%Y-%m-%dT%H:%M:%S.%3N%z'
2018-07-01T06:57:28.457-0700

相关内容