我在服务器和客户端之间转换日期时遇到了问题,两者都在德国运行.客户端计算机上的区域设置可以设置为英国或德国.我从服务器接收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;
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ner 22
我想你正在转换到UTC(而不是英国)时间.由于中欧仍然有夏季时间(如果温度不同,则会发生这种情况),差异是在10月31日之前的+2小时.
如果你知道你正在从德国转换到英国(即夏季将CEST转为BST,冬季转为CET转为GMT),为什么不减1小时呢?
如果您想要英国的时区信息,可以使用它来构建它
var britishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
Run Code Online (Sandbox Code Playgroud)
然后你可以使用转换日期
var newDate = TimeZoneInfo.ConvertTime(serverDate, TimeZoneInfo.Local, britishZone);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15269 次 |
| 最近记录: |