将UTC / GMT时间转换为本地时间

我们正在为Web服务客户端开发C#应用程序。 这将在Windows XP PC上运行。

Web服务返回的其中一个字段是DateTime字段。 服务器以GMT格式返回一个字段,即在最后以“Z”结尾。

但是,我们发现.NET似乎做了某种隐式转换,时间总是12小时。

下面的代码示例在一定程度上解决了这个问题,12小时的差异已经消失了,但是它不允许NZ夏令时。

CultureInfo ci = new CultureInfo("en-NZ");
string date = "Web service date".ToString("R", ci);
DateTime convertedDate = DateTime.Parse(date);            

根据这个日期网站:

UTC / GMT偏移

标准时区:UTC / GMT +12小时
夏令时:1小时
当前时区偏移: UTC / GMT +13小时

我们如何调整额外的时间? 这可以通过编程来完成吗?或者这是PC上的某种设置?


对于诸如2012-09-19 01:27:30.000字符串, DateTime.Parse无法知道日期和时间来自哪个时区。

DateTime有一个Kind属性,可以有三个时区选项之一:

  • 不明
  • 本地
  • 世界标准时间
  • 注意如果您希望表示UTC以外的日期/时间或当地时区,则应使用DateTimeOffset


    所以对于你的问题中的代码:

    DateTime convertedDate = DateTime.Parse(dateStr);
    
    var kind = convertedDate.Kind; // will equal DateTimeKind.Unspecified
    

    你说你知道它是什么样的,所以告诉它。

    DateTime convertedDate = DateTime.SpecifyKind(
        DateTime.Parse(dateStr),
        DateTimeKind.Utc);
    
    var kind = convertedDate.Kind; // will equal DateTimeKind.Utc
    

    现在,一旦系统知道UTC时间,就可以调用ToLocalTime

    DateTime dt = convertedDate.ToLocalTime();
    

    这会给你你需要的结果。


    如果你在.NET 3.5中,我会考虑使用System.TimeZoneInfo类。 请参阅http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx。 这应该考虑到夏令时更改正确。

    // Coordinated Universal Time string from 
    // DateTime.Now.ToUniversalTime().ToString("u");
    string date = "2009-02-25 16:13:00Z"; 
    // Local .NET timeZone.
    DateTime localDateTime = DateTime.Parse(date); 
    DateTime utcDateTime = localDateTime.ToUniversalTime();
    
    // ID from: 
    // "HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionTime Zone"
    // See http://msdn.microsoft.com/en-us/library/system.timezoneinfo.id.aspx
    string nzTimeZoneKey = "New Zealand Standard Time";
    TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(nzTimeZoneKey);
    DateTime nzDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone);
    

    TimeZone.CurrentTimeZone.ToLocalTime(date);
    
    链接地址: http://www.djcxy.com/p/18755.html

    上一篇: Convert UTC/GMT time to local time

    下一篇: Convert UTC date time to local date time