【问题标题】:Convert a time in milliseconds to local date string以毫秒为单位的时间转换为本地日期字符串
【发布时间】:2020-02-04 09:18:22
【问题描述】:

我正在尝试将以毫秒为单位的时间戳转换为本地日期时间。但这很奇怪。

日期增加 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

怎么了?

【问题讨论】:

  • 时区,大概。
  • 无法复制:dotnetfiddle.net/Wh0IdN。我怀疑你当地的时区是+5.30?或许是印度?
  • 抱歉,我不明白如何修复我的代码
  • 你得到的是“你的”时区的时间。将其转换为UTC,然后您将得到它。 ConvertToLocalDate("1579631400000").ToUniversalTime()

标签: c# datetime datetime-format


【解决方案1】:

由于您的 ConvertToLocalDate 函数将日期和时间返回到您的本地时区。您需要将其转换为 UTC 以获得预期的日期和时间。

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;
        }
    }

或者干脆不要在ConvertToLocalDate 中使用 ToLocalTime()(如果是这种情况,您的函数不应命名为 ConvertToLocalDate

【讨论】:

  • 避免ToLocalTime()(并明确地将dateAfterEpoch创建为UTC)会更可取:请记住,某些日期时间不是可往返的(考虑到夏令时的转换),这意味着此代码在某些极端情况下会失败
【解决方案2】:

不要使用 ToLocalTime().rest 也可以正常工作

【讨论】:

    猜你喜欢
    • 2020-12-17
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2014-03-14
    相关资源
    最近更新 更多