31

特定の形式で日付を取得する必要がありますが、その方法がわかりません。

現時点で日付を取得する方法は次のとおりです。

date -r "$timestamp" +'%Y-%m-%dT%H:%M:%S.s'

ただし、問題は、必要な形式に対してミリ秒の桁数が多すぎることです。ミリ秒を 3 桁に制限する必要があります。

どうすればそのようなことができるのでしょうか?

現在の回避策

正確ではありませんが、動作します。その後、ミリ秒を計算し、文字列の最初の 3 文字を取得します。明らかに、これは切り上げを考慮していません。

date_string_one=`date -r "$timestamp" +'%Y-%m-%dT%H:%M:%S.'`
date_string_milli=`date -r "$timestamp" +'%s'`
date_string="$date_string_one"`printf "%.3s" "$date_string_milli"`
4

9 に答える 9

52

%3N単純に、ナノ秒を最上位 3 桁に切り捨てるために使用できます。

$ date +"%Y-%m-%d %H:%M:%S,%3N"
2014-01-08 16:00:12,746

また

$ date +"%F %T,%3N"
2014-01-08 16:00:12,746

testet with »GNU bash, Version 4.2.25(1)-release (i686-pc-linux-gnu)«

ただし、ターゲット システムまたは bash のバージョンによっては %N が実装されていない可能性があることに注意してください。組み込みシステム »GNU bash、バージョン 4.2.37(2)-release (arm-buildroot-linux-gnueabi)« でテストしました%N

date +"%F %T,%N"
2014-01-08 16:44:47,%N
于 2014-01-08T15:04:09.920 に答える
6

これを行うための何百万もの方法..簡単な方法の1つは、末尾の数字を削除することです...

date +'%Y-%m-%d %H:%M:%S.%N' | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9]$//g'

また

date +'%Y-%m-%d %H:%M:%S.%N' | sed 's/......$//g'
于 2013-04-16T12:35:33.913 に答える
4

「安い」解決策を提供せずにはいられません...

echo $(date +"%Y-%m-%d-%H:%M:%S.")$((RANDOM%1000))

結局のところ、私の場合のように、精度が一意性よりも重要でない場合は... ここにあります。

于 2014-02-03T03:41:08.297 に答える
2
str="2013-04-05 13:33:53.180"

dateStr1=`date -d "$str" +'%Y-%m-%d %H:%M:%S.%N'`;

echo $dateStr1

dateStr2=`date -d "$dateStr1" +'%s'`

echo $dateStr2

dateStr3="$dateStr2"`echo ${dateStr1:20:3}`

echo $dateStr3

============================

[Output]
2013-04-05 13:33:53.180000000
1365140033
1365140033180

(上記では、UTC の datestr を考慮してください)

于 2013-10-17T10:21:27.417 に答える
1

1 つの問題:%sミリ秒の日付形式ではなく、現在のエポックの秒です。%N はナノ秒を返します。ミリ秒を与える GNU 日付の指定された日付形式を知りません。

date --help すべての形式オプションを表示してみてください。

于 2013-04-16T13:02:20.727 に答える