C#:Unix时间戳和日期时间

C#:Unix时间戳和日期时间,c#,.net,datetime,timestamp,C#,.net,Datetime,Timestamp,我们正在开发一个C#web应用程序,它必须处理Unix时间戳和C#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: " + tim

我们正在开发一个C#web应用程序,它必须处理Unix时间戳和C#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

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

致以最良好的祝愿, Thorsten你可以看看

你可以看看


为什么不在创建实例时指定
DateTimeKind.Utc
,这样行吗?比如
newsystem.DateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc)(希望14:02:32是GMT)始终以UTC格式存储时间,客户端应用程序负责告诉服务器它希望输出的时间格式。@V4Vendetta-14:02:32是GMT+2您的unix时间戳已经是本地时间。这是您的问题。@Xanatos:如果我的unix时间戳已经在本地时间,您会怎么做才能使日期时间正确?为什么不在创建实例时指定
DateTimeKind.Utc
?比如
newsystem.DateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc)(希望14:02:32是GMT)始终以UTC格式存储时间,客户端应用程序负责告诉服务器它希望输出的时间格式。@V4Vendetta-14:02:32是GMT+2您的unix时间戳已经是本地时间。这是您的问题。@Xanatos:如果我的unix时间戳已经在本地时间,您会怎么做才能使日期时间正确?
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); }
    }        
}