【问题标题】:How to convert Long type datetime to DateTime with correct time zone如何将 Long 类型的 datetime 转换为具有正确时区的 DateTime
【发布时间】:2011-06-25 06:40:41
【问题描述】:

例如 1297380023295 应该是 2010/2/11 9 AM 我现在使用这个代码

        long dateNumber = num;
        long beginTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
        DateTime dateValue = new DateTime(beginTicks + dateNumber * 10000);

        return dateValue;

这个函数的结果是凌晨 1 点,它是格林威治标准时间。 我能用它做什么?

【问题讨论】:

    标签: c# datetime timezone


    【解决方案1】:

    你可以使用DateTimeOffset中的static方法。

    DateTimeOffset.FromUnixTimeSeconds()

    DateTimeOffset.FromUnixTimeMilliseconds()

    取决于您的刻度线采用哪种格式。

    如果你想要DateTime,你可以使用例如

    var ticks = 1635091250;
    var dateTime = DateTimeOffset.FromUnixTimeSeconds(ticks).DateTime;
    

    【讨论】:

      【解决方案2】:

      Powershell 脚本片段,仅供参考

      $minDate = New-Object "System.DateTime"
      $minDate = $minDate.AddYears(1969)
      $minDate.AddMilliseconds(1446616420947)
      

      【讨论】:

        【解决方案3】:

        您正在寻找ToLocalTime() 方法:

        long unixDate = 1297380023295;
        DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        DateTime date= start.AddMilliseconds(unixDate).ToLocalTime();
        

        【讨论】:

        • 我发现下面的链接更有用stackoverflow.com/a/6156193/3728916
        • @ImranNaqvi:该方法需要 .Net 滴答声,而不是 Unix 时间戳。
        • @SLaks +1 进行更正谢谢你是对的,你能指导我如何使用你的代码只获取日期部分
        • @ImranNaqvi:您正在寻找 .Date 属性。
        • @SLaks - 是的,我发现它使用 DateTime myDate = DateTime.FromOADate(Convert.ToDouble(rd[0])); string mydate2 = myDate.ToString("dd/MM/yyyy");
        【解决方案4】:
        long a= 634792557112051692;
        //a= ticks time
          DateTime dt = new DateTime(a);
           Response.Write(dt.Hour.ToString());
        
        
        //dt.hour convert time ticks to time hour
        

        【讨论】:

          【解决方案5】:

          您可以在创建新的 DateTime 对象时指定 DateTimeKind,因此您可以将其指定为 UTC,然后使用 .ToLocalTime 将其转换为本地时间:

                  long dateNumber = 1297380023295;
                  long beginTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
          
                  DateTime dt = new DateTime(beginTicks + dateNumber * 10000, DateTimeKind.Utc);
                  MessageBox.Show(dt.ToLocalTime().ToString());
          

          【讨论】:

          • 如何将DateTime.Parse("22:34") 转换为long
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 2012-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-08
          • 1970-01-01
          相关资源
          最近更新 更多