2011-10-19 252 views
2

我们正在开发一个C#web应用程序,它必须处理Unix时间戳和C#DateTime对象。时间戳必须转换为DateTime对象。C#:Unix时间戳和日期时间

下面的例子显示了我的问题:日期时间应该是'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(),日期时间是正确的:

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。

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

最好的问候, 托尔斯滕

+1

时,你的情况下,为什么不指定'DateTimeKind.Utc',运作的?像新的System.DateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc);'(希望14:02:32是格林尼治标准时间) – V4Vendetta

+0

总是以UTC存储时间,这是客户端应用程序告诉服务器如何将输出格式化的时间。 – Angelom

+0

@ V4Vendetta - 14:02:32是GMT + 2 – Polity

回答

0

你可以看看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); } 
    }   
}