Как получить "сегодняшнюю местную полночь, выраженную в UT C", используя ядро. NET? - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь получить метку времени для «Местная полночь в UT C», используя. NET Core.

Я написал этот код:

var utcTimeStartLocalDay =
            TimeZoneInfo.ConvertTimeToUtc(convertToLocalTimezone(DateTime.UtcNow).Date);

, где

public DateTime ConvertToLocalTimezone(DateTime dateTime)
{
    return TimeZoneInfo.ConvertTime(dateTime, TimeZoneInfo.Utc,TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
}

Итак, идея состоит в том, чтобы получить Ut c отметку времени, преобразовать ее в локальную TZ, затем взять Date (то есть отбросить часть времени и эффективно сделать отметку времени полуночи) и преобразовать обратно в Ut c - это должно было дать мне местное время.

Однако этого не произошло, так как результатом первого выражения было Ut c полночь при печати. ​​

Fiddle: https://dotnetfiddle.net/wJIXve

Что мне нужно исправить здесь, чтобы получить в качестве ответа местную полночь для дня, выраженного в UT C (что-то вроде 22:00 UT C в предыдущий день)?

Изменить: просто чтобы прояснить неясность в вопросе: под "местным" TZ я имел в виду известный местный часовой пояс (найден в коде)

Ответы [ 3 ]

2 голосов
/ 29 января 2020

Чтобы убедиться, что вы определенно используете местное время, я бы использовал этот код:

DateTime localMidnight = DateTime.SpecifyKind(DateTime.Now.Date, DateTimeKind.Local);

Затем просто используйте .ToUniversalTime(), чтобы получить дату UT C:

DateTime localMidnightUtc = localMidnight.ToUniversalTime();

Вот рабочий пример:

static async Task Main(string[] args)
{
    DateTime localMidnight = DateTime.SpecifyKind(DateTime.Now.Date, DateTimeKind.Local);
    DateTime localMidnightUtc = localMidnight.ToUniversalTime();

    Console.WriteLine($"localMidnight:    {localMidnight}");
    Console.WriteLine($"localMidnightUTC: {localMidnightUtc}");
}

// Output:
// localMidnight:    29.01.2020 00:00:00
// localMidnightUTC: 28.01.2020 23:00:00

(И теперь вы знаете, в каком часовом поясе я нахожусь;)

2 голосов
/ 29 января 2020

Это должно работать.

var result = DateTime.Now.Date.ToUniversalTime();
1 голос
/ 29 января 2020

Этот однострочный такой же, как. NET Framework:

DateTime.Today.ToUniversalTime();
...