Конвертировать CIM_DATETIME в Bash / Python - PullRequest
0 голосов
/ 10 марта 2019

У меня есть CIM_DATETIME время, полученное от wmic os get lastbootuptime:

20190309221835.234400-480

CIM_DATETIME отформатирован следующим образом:

yyyymmddHHMMSS.mmmmmmsUUU

Как я могу преобразовать это в нечто более дружественное к человеку в Bash или Python?

Формат, который будет наиболее желательным, будет:

Sunday, March 10th, 2019 @ 16:01:30 UTC

Это или если бы я мог преобразовать его во что-то нормальное, например, метку времени Unix. Если вам интересно, что я нуждаюсь в этом на языках, отличных от Windows (в Batch уже есть много решений), потому что я занимаюсь компьютерной экспертизой, но использую Linux в качестве основной ОС, поэтому я хочу иметь возможность легко интерпретировать даты, получаемые с WMI в то, что я могу легко интерпретировать. Это такая ниша, что я даже не могу найти онлайн-инструмент для этого. : /

Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 марта 2019

Вот решение в Bash, которое я придумал.Вывод кажется правильным и совпадает со временем, которое пару дней назад я загрузил на Windows, - незадолго до полуночи.Я также удалил «@», потому что это едва удлиняло время, и поэтому пришлось удалить его в следующих сценариях, используя CIM_DATETIME, поскольку команда date не смогла разобрать это.

CIM_DATETIME="20190309221835.234400-480"

date="${CIM_DATETIME:0:8}"
date="$(date -d "$date" '+%A, %B%e, %Y')"

time="${CIM_DATETIME:8:6}"
time="$(echo "$time" | sed 's/../&:/g;s/:$//')" # Adds : between hours, minutes and seconds of time so it can be parsed correctly

timezone="${CIM_DATETIME:21}"
time="$time $timezone"

time="$(date -d "$time" '+%r %Z')"

echo "$date $time"

Пример вывода: Saturday, March 9, 2019 11:38:35 PM EDT

Спасибо за все решения.

1 голос
/ 11 марта 2019

, но для компьютерной экспертизы часовой пояс действительно предпочтительнее.

Ответ комбинаториста уже выполняет половину работы.Его можно легко расширить, чтобы учесть смещение часового пояса:

import datetime
CIM_DATETIME ='20190309221835.234400-480'
dt = datetime.datetime.strptime(CIM_DATETIME[:-4], '%Y%m%d%H%M%S.%f')
# dt is now datetime.datetime(2019, 3, 9, 22, 18, 35, 234400)
dt -= datetime.timedelta(minutes=int(CIM_DATETIME[-4:]))
# dt is now datetime.datetime(2019, 3, 10, 6, 18, 35, 234400)
dt.strftime("%A, %B %d., %Y @ %X UTC")
1 голос
/ 10 марта 2019

Вы можете получить метку времени без часового пояса с этим:

from datetime import datetime
datetime.strptime(CIM_DATETIME.split('-')[0], '%Y%m%d%H%M%S.%f')

[Обратите внимание, что для разделения строки предполагается отрицательное смещение часового пояса.] Выгода с часовым поясом в том, что он выражается в минутах, поэтому вам нужно разделить на 60. Но нужно ли вам читать часовой пояс? Если оно всегда будет одинаковым, вы сможете внести это отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...