Кто-нибудь знает библиотеку для преобразования моей (ISO8601 ???) строки метки времени в формат метки времени UNIX? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть временная метка, извлекаемая из документа XML в формате

2019-02-13T09: 01: 53.557 + 00: 00

Кто-нибудь знает библиотеку для преобразования этогоUnix время или мне придется возиться со строкой?

Поскольку я сам не генерирую метку времени, ответы, которые я нашел, мне мало помогают.Я думаю, что формат iso8601, но я не уверен, так как он, кажется, имеет несколько дополнительных цифр, которые я предполагаю, мс разрешение (поскольку это относится к станку), это проблема?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Используя DateTimeOffset.ToUnixTimeSeconds из .NET 4.6 и выше, это должно быть довольно просто:

if (DateTime.TryParse("2019-02-13T09:01:53.557+00:00", out var dateTime))
{
    var unixTimestamp = ((DateTimeOffset)dateTime).ToUnixTimeSeconds();
}

Если по какой-либо причине ваш формат строки изменяется, вы также можете сделать точныйпарсинг используя DateTime.TryParseExact:

if (DateTime.TryParseExact("2019-02-13T09:01:53.557+00:00", "yyyy-MM-dd'T'HH:mm:ss.fffzzz", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out var dateTime))
{
    var unixTimestamp = ((DateTimeOffset)dateTime).ToUnixTimeSeconds();
}
0 голосов
/ 13 февраля 2019

Как правило, вы должны учитывать, что такое метка времени Unix: (из Википедии)

Это количество секунд, прошедшее с 00:00:00 четверга, 1Январь 1970 года, всемирное координированное время (UTC), минус високосные секунды

Поэтому, вероятно, решением будет синтаксический анализ строки до даты и времени, преобразование ее в UTC и вычисление секунд.

var date = DateTime.Parse("2019-02-13T09:01:53.557+00:00", null, System.Globalization.DateTimeStyles.RoundtripKind);
var unixTimestamp = (int)(date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...