【问题标题】:C#: Unix timestamp and DateTimeC#:Unix 时间戳和 DateTime
【发布时间】:2011-12-10 16:35:18
【问题描述】:

我们正在开发一个必须处理 Unix 时间戳和 C# DateTime 对象的 C# Web 应用程序。必须将时间戳转换为 DateTime 对象。

以下示例显示了我的问题:DateTime 应该是 '18.10.2011 14:02:32'

System.DateTime time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
time = time.AddSeconds(1318939352);
System.Console.Out.WriteLine("Time: " + time); // -> 18.10.2011 12:02:32

如果我在开发人员机器上调用 ToLocalTime(),则 DateTime 是正确的:

System.DateTime time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
time = time.AddSeconds(1318939352).ToLocalTime();
System.Console.Out.WriteLine("Time: " + time); // -> 18.10.2011 14:02:32

但应用程序将在托管在另一个时区(GMT 标准时间)的服务器上运行,因此我必须处理不同的时区,而第二个示例在该服务器上失败。 无论我在哪里托管应用程序,在这种情况下,日期都应始终打印为 18.10.2011 14:02:32。

有人知道我该怎么做吗?提前致谢!

最好的问候, 托尔斯滕

【问题讨论】:

  • 创建实例时为什么不指定DateTimeKind.Utc,这样行吗?喜欢new System.DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc);(希望 14:02:32 是格林威治标准时间)
  • 始终以 UTC 格式存储时间,客户端应用程序有责任告诉服务器它希望如何格式化输出时间。
  • @V4Vendetta - 14:02:32 是 GMT + 2
  • 您的 unix 时间戳已经是本地时间。这是你的问题。
  • @Xanatos:如果我的 unix 时间戳已经是本地时间,你会怎么做才能使 DateTime 正确?

标签: c# .net datetime timestamp


【解决方案1】:

你可以看看TimeZoneInfo

public struct DateTimeWithZone
{
    private readonly DateTime utcDateTime;
    private readonly TimeZoneInfo timeZone;

    public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone)
    {
        utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone); 
        this.timeZone = timeZone;
    }

    public DateTime UniversalTime 
    { 
       get {  return utcDateTime; } 
    }

    public TimeZoneInfo TimeZone 
    { 
       get { return timeZone; } 
    }

    public DateTime LocalTime
    { 
        get { return TimeZoneInfo.ConvertTime(utcDateTime, timeZone); }
    }        
}

【讨论】:

    猜你喜欢
    • 2018-01-04
    • 2010-11-19
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多