Как преобразовать метки времени в даты в Bash?

user20719, платформа имеет базовый уровень ведения журнала, который нельзя отключить. Это сделано для того, чтобы инженеры службы поддержки имели 90-дневную хронологическую картину активности вашего приложения при устранении неполадок. Если у вас все журналы отключены в разделе «Журналы диагностики», то это далеко, как далеко вы можете зайти.

Глядя на основную проблему, низкую производительность и ошибки 5XX, есть много вещей, которые могут быть причиной этого. Не имея названия вашего сайта, я бы посоветовал вам начать использовать блейд «диагностировать и решить» для вашего веб-приложения. Это основано на многих инструментах, которые используют наши инженеры поддержки.

Мой совет: начинать с длинных и медленных запросов. Посмотрите, может ли блок диагностики диагностировать длительные запросы, и, надеюсь, он даст вам дополнительную информацию о том, сколько времени уходит на обработку запроса. Это тратится на конкретный модуль, нехватка памяти и т. Д .

Пожалуйста, дайте нам знать, если вам нужна помощь, чтобы разбить какой-либо из результатов.

249
задан Peter Mortensen 10 September 2015 в 23:39
поделиться

7 ответов

В более поздних версиях распространенных дистрибутивов Linux вы можете использовать :

date -d @1267619929
487
ответ дан 23 November 2019 в 02:57
поделиться

В то время как не чистый удар, следующий сценарий преобразует метки времени длины 13 в строке на их эквивалентную дату в Вашем локальном часовом поясе с помощью жемчуга

, timestamp_to_date.sh

#!/usr/bin/env bash
IT=$(cat /dev/stdin)
re='(.*)([0-9]{13})(.*)'
while [[ $IT =~ $re ]]; do
  TIMESTAMP=${BASH_REMATCH[2]}
  AS_DATE=$(echo "$TIMESTAMP" | perl -pe 's/([\d]{10})([\d]{3})/localtime $1/eg;')
  IT="${IT/$TIMESTAMP/$AS_DATE}"    
done
echo "$IT"

ввел

{"timestamp":"1573121629939","level":"DEBUG","thread":"http-nio-15372-exec-3","logger":"org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor"}

, производит

$ cat input | timestamp_to_date.sh

{"timestamp":"Thu Nov  7 06:13:49 2019","level":"DEBUG","thread":"http-nio-15372-exec-3","logger":"org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor"}
0
ответ дан 23 November 2019 в 02:57
поделиться

Вы можете использовать этот простой сценарий awk:

#!/bin/gawk -f   
{ print strftime("%c", $0); }

Пример использования:

$ echo '1098181096' | ./a.awk 
Tue 19 Oct 2004 03:18:16 AM PDT
$
10
ответ дан 23 November 2019 в 02:57
поделиться

Вы можете использовать дату GNU, например,

$ sec=1267619929
$ date -d "UTC 1970-01-01 $sec secs"

или

$ date -ud @1267619929
17
ответ дан 23 November 2019 в 02:57
поделиться

Я написал сценарий, который сам делает это:

#!/bin/bash
LANG=C
if [ -z "$1" ]; then
    if [  "$(tty)" = "not a tty" ]; then
            p=`cat`;
    else
            echo "No timestamp given."
            exit
    fi
else
    p=$1
fi
echo $p | gawk '{ print strftime("%c", $0); }'
3
ответ дан 23 November 2019 в 02:57
поделиться

В PHP

$unix_time = 1256571985;

echo date("Y-m-d H:i:s",$unix_time)
-6
ответ дан 23 November 2019 в 02:57
поделиться

Эта версия похожа на ответ chiborg'а, но она устраняет необходимость во внешних tty и cat. Он использует date, но с таким же успехом может использовать gawk. Вы можете изменить shebang и заменить двойные квадратные скобки на одинарные, и это также будет работать в sh.

#!/bin/bash
LANG=C
if [[ -z "$1" ]]
then
    if [[ -p /dev/stdin ]]    # input from a pipe
    then
        read -r p
    else
        echo "No timestamp given." >&2
        exit
    fi
else
    p=$1
fi
date -d "@$p" +%c
27
ответ дан 23 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: