【发布时间】:2011-05-01 09:35:15
【问题描述】:
我在转换我的服务器和客户端之间的日期时遇到了一个问题,两者都在德国运行。客户端机器上的区域设置可以设置为英国或德国。我从服务器收到 CET 格式的日期,我需要在 UI 上将这个时间表示为英国时间。例如,从服务器收到的时间,例如 01/07/2010 01:00:00 在 UI 上应表示为 01/07/2010 00:00:00。我为此目的编写了一个转换器,但是在运行它时会出现 2 小时的时差。下面是代码,您能帮忙吗?
public class LocalToGmtConverter : IDateConverter
{
private readonly TimeZoneInfo timeZoneInfo;
public LocalToGmtConverter()
: this(TimeZoneInfo.Local)
{
}
public LocalToGmtConverter(TimeZoneInfo timeZoneInfo)
{
this.timeZoneInfo = timeZoneInfo;
}
public DateTime Convert(DateTime localDate)
{
var utcKind = DateTime.SpecifyKind(localDate, DateTimeKind.Utc);
return utcKind;
}
public DateTime ConvertBack(object fromServer)
{
DateTime serverDate = (DateTime)fromServer;
var utcOffset = timeZoneInfo.GetUtcOffset(serverDate);
var uiTime = serverDate- utcOffset;
return uiTime;
}
}
【问题讨论】:
-
您是从服务器获取德国时间还是格林威治标准时间?
-
更好的方法有两个时间在 UTC 并根据需要转换为本地
-
GMT 现已失效,已被 UTC 取代。他们告诉我有区别,但据我所知,唯一的区别是它不是以地点命名的。也许不同之处在于它永远不会随着 DST 而变化,而 GMT 会变化。我不知道。
-
等到本周末之后。由于英国时间将与 UTC 重合,因此转换将正常工作到明年 3 月。