Отображение метки времени в дд / мм / гггг чч: мм: сс: мс в Unix или Linux

26

Мне нужно отображать дату и время в нужном формате в Unix / Linux. Мой желаемый формат: дд / мм / гггг чч: мм: сс: мс в Unix или Linux. Я подошел ближе, используя следующую команду:

echo $(date +%x_%r)

Это возвращает:

08/20/2012_02:26:14 PM

Какие-либо предложения?

моток
источник
2
Есть ли какая-то причина, которую вы используете echo? Это кажется излишним, вы можете просто использовать dateнапрямую
lk-
Я планирую сохранить текущее время в параметре и использовать его как часть имени выходного файла.
Хэнк
6
Почему бы не использовать строку даты в формате ISO? Это / не годится в именах файлов ... ( en.wikipedia.org/wiki/ISO_8601 )
Йохан
Смотрите эту ссылку: ccollins.wordpress.com/2009/01/06/… .
Наиболее распространенные форматы: zxq9.com/archives/795
zxq9

Ответы:

26
date +%x_%H:%M:%S:%N

если вам нужно вывести только два первых числа как мс:

date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/'

хранить его в var:

VAR=$(date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/')
порыв
источник
1
Это специфично для Linux; это не работает на OS X или * BSD.
CNST
Примечание.% X возвращает представление даты для локали. Так что это может измениться в зависимости от текущей локали. Если вам нужен конкретный формат даты, вам, вероятно, лучше явно указать его (как показано в других ответах ниже) date +'%d/%m/%Y_%H:%M:%S:%N.
Studgeek
23

Если вам нужна точность в миллисекундах, а не в наносекундах, вы можете использовать %3Nвместо %N:

$ date +'%d/%m/%Y %H:%M:%S:%3N'
12/04/2014 18:36:20:659

или с вашим желаемым использованием $(…):

$ echo "$(date +'%d/%m/%Y %H:%M:%S:%3N')"
12/04/2014 18:36:20:659

Но имейте в виду, что это %Nможет не реализоваться в зависимости от вашей целевой системы или версии bash. Протестировано на встроенной системе »GNU bash, версия 4.2.37 (2) -релиз (arm-buildroot-linux-gnueabi)« не было %N(ни одного %3N):

date +"%F %T,%N"
2014-01-08 16:44:47,%N
Джо
источник
2
Похоже, что ни FreeBsd, ни Mac Osx не поддерживают %Nили %3N.
Джо
Я добавил echo "$(date +'%F %H:%M:%S:%3N') Failed" >> logfile.txt, но он написал file.file 08:21:02OURCE:184 Failedв лог-файл. Что я сделал не так?
Свен
На macOS есть gdateв Homebrew apple.stackexchange.com/a/135749/181223
Фил Пирожков
0

Что-то вроде этого

дата + "% d /% m /% Y_% H:% M:% S:% N"

Использовал% N для наносекунд (000000000..999999999), так как сейчас я не нашел миллисекунд

Johan
источник
0

Можешь попробовать:

echo `date +"%Y_%m_%d %H:%M:%S,"``date +%N/1000000|bc -l|grep -Eo "^([0-9]{0,3})"`

По какой-то причине `` 'опущено, поэтому поместите его после echo и в конце, или просто:

date +"[%Y_%m_%d %H:%M:%S,%3N]"
user2538887
источник