Преобразовать время в миллисекундах в локальную строку даты - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь преобразовать метку времени в миллисекундах в местное время. Но это странно.

Дата увеличивается на 1 день. Я не знаю, как глупо я могу звучать, но я был бы очень рад, если бы кто-то пролил свет на это.

КОД:

public static DateTime ConvertToLocalDate(string timeInMilliseconds){
     double timeInTicks = double.Parse(timeInMilliseconds);
     TimeSpan dateTimeSpan = TimeSpan.FromMilliseconds(timeInTicks);
     DateTime dateAfterEpoch = new DateTime(1970, 1, 1) + dateTimeSpan;
     DateTime dateInLocalTimeFormat = dateAfterEpoch.ToLocalTime();
     return dateInLocalTimeFormat;
}

Например , если я передаю: 1579631400000, что эквивалентно: 2020-01-21T18:30:00, возвращается: 1/22/2020 12:00:00 AM

Что не так?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Не используйте ToLocalTime (). Остальные будут работать нормально

0 голосов
/ 04 февраля 2020

Поскольку ваша функция ConvertToLocalDate возвращает дату и время в ваш местный часовой пояс. Вам нужно преобразовать его в UT C, чтобы получить ожидаемую дату и время.

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(ConvertToLocalDate("1579631400000").ToUniversalTime());

            Console.ReadKey();
        }

        public static DateTime ConvertToLocalDate(string timeInMilliseconds)
        {
            double timeInTicks = double.Parse(timeInMilliseconds);
            TimeSpan dateTimeSpan = TimeSpan.FromMilliseconds(timeInTicks);
            DateTime dateAfterEpoch = new DateTime(1970, 1, 1) + dateTimeSpan;
            DateTime dateInLocalTimeFormat = dateAfterEpoch.ToLocalTime();
            return dateInLocalTimeFormat;
        }
    }

Или просто не использовать ToLocalTime () внутри вашего ConvertToLocalDate (если это так, ваша функция не должна быть названным Convert ToLocalDate )

...