Как правильно конвертировать DateTime в определенный часовой пояс? - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь преобразовать эту дату: Sunday 26 August 2018 18:30:00 в GMT +2, поэтому результат должен быть: Today, 26 Aug 2018, 20:30.

Теперь работает следующий код:

var unixTimeStampValue = Convert.ToInt64(1535308200);
var unixTimeStamp = unixTimeStampValue.Split("-")[0].Replace("t", "");
unixTimeStamp = Regex.Match(unixTimeStamp, @"\d+").Value;

DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddSeconds(Convert.ToInt64(unixTimeStamp));

TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time");
var date = TimeZoneInfo.ConvertTimeFromUtc(dtDateTime, timeInfo);

но проблема в том, что если я запусту это в linux, я получу:

System.IO.FileNotFoundException: идентификатор часового пояса «Центральное европейское стандартное время» не был найден на локальном компьютере-> System.IO.FileNotFoundException: не удалось найти файл '/ usr / share / zoneinfo / Central Europe Standard Time'.

Проблема появляется только в Linux, как я могу это исправить?Есть еще один способ получить это преобразование?

1 Ответ

0 голосов
/ 26 августа 2018

По запросу, пример с Noda Time :

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        Instant instant = Instant.FromUnixTimeSeconds(1535308200);
        DateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Budapest"];
        ZonedDateTime zoned = instant.InZone(zone);
        Console.WriteLine(zoned);
    }
}

Вывод на мою машину:

2018-08-26T20:30:00 Europe/Budapest (+02)

Вы можете преобразовать ZonedDateTime обратно вDateTime если вам нужно, но лучше использовать Noda Time для максимально возможной обработки даты / времени, чтобы получить максимальную выгоду.

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