是怎么表示现在的英国时间的?我在服务器和客户端之间转换日期时遇到问题,两者都在德国运行。客户端计算机上的区域设置可以设置为英国或德国。我从服务器收到CET格式的日期,我需要在UI上将这个时间表示为英国时间。例如,从服务器收到的时间01/07/201001:00:00在UI上应表示为01/07/201000:00:00。我为此编写了一个转换器,但是当我运行它时,我得到了2小时的时差。下面是代码,请帮忙?publicclassLocalToGmtConverter:IDateConverter{privatereadonlyTimeZoneInfotimeZoneInfo;publicLocalToGmtConverter():this(TimeZoneInfo.Local){}publicLocalToGmtConverter(TimeZoneInfotimeZoneInfo){this.timeZoneInfo=timeZoneInfo;}publicDateTimeConvert(DateTimelocalDate){varutcKind=DateTime.SpecifyKind(localDate,DateTimeKind.Utc);返回utcKind;}publicDateTimeConvertBack(objectfromServer){DateTimeserverDate=(DateTime)fromServer;varutcOffset=timeZoneInfo.GetUtcOffset(serverDate);varuiTime=serverDate-utcOffset;Timereturnui}}我认为您正在转换为UTC(而非英国)时间。由于中欧仍然是夏令时(如果温度不同可能会发生这种情况),因此在10月31日之前相差+2小时。如果您知道要从德国转换为英国(即夏季从CEST转换为BST,冬季从CET转换为GMT),为什么不减去1小时呢?如果您需要英国的时区信息,您可以使用varbritishZone=TimeZoneInfo.FindSystemTimeZoneById("GMTStandardTime");然后您可以使用varnewDate=TimeZoneInfo.ConvertTime(serverDate,TimeZoneInfo.Local,britishZone);转换日期使用TimeZoneInfo.ConvertTime将原始输入时区(CET)转换为目标时区(UK)。publicstaticDateTimeConvertTime(DateTimedateTime,TimeZoneInfosourceTimeZone,TimeZoneInfodestinationTimeZone)MSDN上的完整指南:转换时区之间的时间来自MSDN的修改代码示例:DateTimeceTime=newDateTime(2007,02,01,08,00,00);try{TimeZoneInfoceZone=TimeZoneInfo.FindSystemTimeZoneById("中欧标准时间");TimeZoneInfogmtZone=TimeZoneInfo.FindSystemTimeZoneById("GMT标准时间");Console.WriteLine("{0}{1}是{2}GMT时间。",ceTime,ceZone.IsDaylightSavingTime(ceTime)?ceZone.DaylightName:ceZone.StandardName,TimeZoneInfo.ConvertTime(ceTime,ceZone,gmtZone));}catch(TimeZoneNotFoundException){Console.WriteLine("注册表没有定义所需的时区。");}catch(InvalidTimeZoneException){Console.WriteLine("所需时区的注册表数据已损坏。");}处理本地时间的更好方法是以统一的表示形式存储它们,例如UTC。因此,您可以将所有输入时间转换为UTC(通过.ToUniversalTime()),并存储(或传输)它的值。当您需要显示它时,只需使用.ToLocalTime()转换回来。这样,您就可以避免要求知道原始值是哪个时区,并且可以轻松地显示不同时区的存储值。此外,您还避免了必须为处理下一个时区的时间编写特定逻辑、试图找出如何在所有可用时间转换它们的麻烦。这就是我所做的:varBritishZone=TimeZoneInfo.FindSystemTimeZoneById("GMTStandardTime");DateTimedt=DateTime.SpecifyKind(DateTime.UtcNow,DateTimeKind.Unspecified);DateTimeInBritishLocal=TimeZoneInfo.ConvertTime(dt,TimeZoneInfo.Local,BritishZone);我需要添加SpecifyKind部分,否则ConvertTime会引发异常我意识到问题出在C#中,但如果您只想进行一次转换,则可以从PowerShell命令行执行此操作:$d=[DateTime]::解析("04/02/201417:00:00")$gmt=[TimeZoneInfo]::FindSystemTimeZoneById("GMT标准时间");[TimeZoneInfo]::ConvertTime($d,$gmt,[TimeZoneInfo]::Local)此脚本会将英国时间17:00转换为您当地的时区。对我来说是CST。有趣的是,如果我将日期设置为2014年3月27日,结果会有所不同,因为UKDST在不同的日期开始。以上就是C#学习教程:如何表示当前英国时间?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
