我遇到的问题是我的服务器需要GMT格式的日期时间对象,我的UI应用程序总是根据本地文化创建和操作所有日期时间对象。我不能改变文化,因为还有其他功能需要datetime对象按照当地的格式。我已经为此编写了一个转换器,不确定是否有任何现成的api允许我这样做。对于timezoneinfo上的GetUtcOffset方法有点困惑,它是否给出了本地时间和gmt时间之间的差异?我试过了在msdn上可用的文档,对我来说有点麻烦。请问你能帮忙吗?我如何通过改变文化和验证输出对它进行单元测试?
以下类将日期时间对象转换为包含等效的GMT时间,并在从服务器接收时将其转换回来。
注意:我的服务器和UI都在CET时间运行,但是这些日期时间对象是特定于英国的,因此服务器在GMT中需要它们。
public class GmtConverter : IDateConverter
{
private readonly TimeZoneInfo timeZoneInfo;
public GmtConverter()
: this(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"))
{
}
public GmtConverter(TimeZoneInfo timeZoneInfo)
{
this.timeZoneInfo = timeZoneInfo;
}
public DateTime Convert(DateTime localDate)
{
var utcOffset = timeZoneInfo.GetUtcOffset(localDate);
var unSpecified = localDate + utcOffset;
return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified);
}
public DateTime ConvertBack(object local)
{
var localDate = (DateTime) local;
var utcOffset = timeZoneInfo.GetUtcOffset(localDate);
var unSpecified = localDate - utcOffset;
return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified);
}
}
答案 0 :(得分:0)
当你说GMT时,你的意思是UTC吗?来自Wikipedia:
在临时使用中,当分数为a 第二个并不重要,格林威治 可以考虑平均时间(GMT) 相当于UTC或UT1。说“GMT” 通常暗示UTC或UT1时 用于非正式或休闲 上下文。在技术背景下,用法 避免“GMT”;毫不含糊 术语“UTC”或“UT1”是 优选的。
如果是这样,问题就解决了: