WCF自动根据时区转换时间

时间:2009-08-31 08:13:19

标签: wcf timezone

我正在使用WCF服务,它返回服务器的当前时间。 我的客户处于不同的时区。当我调用此服务时,它会自动将服务器返回的时间转换为本地时间,这是我不想要的。我怎么忽略这个?

1 个答案:

答案 0 :(得分:3)

将您从WCF服务发出的内容转换为UTC,当您在客户端中创建新时间时,请将它们指定为种类UTC。这将使通用标准时区的时间基准化。您可以向客户显示时间,并确保将其标识为UTC时间。这将缓解那个时间到底是什么的差异或含糊不清。

DateTime serverTimeRaw = myService.GetServerTime();
DateTime serverTimeUTC = new DateTime(serverTimeRaw.Ticks, DateTimeKind.Utc);
Console.WriteLine(serverTimeUTC); // Prints server time as UTC time

如果您确实需要在适当的时区表示时间,则需要将时区信息与DateTime一起发送。我建议创建一个封装两条信息的类型,然后返回它,而不是DateTime本身。时区信息不是DateTime的固有组件。这是两个独立的问题,只在实际编写时提供复合意义。

class ZonedDateTime
{
    public DateTime DateTimeUtc { get; set; }
    public TimeZoneInfo TimeZone { get; set; }

    public DateTime ToDateTime()
    {
        DateTime dt = TimeZoneInfo.ConvertTime(DateTimeUtc, TimeZone);
        return dt;
    }
}

// ...

ZonedDateTime zdt = myService.GetServerZonedTime();
DateTime serverTimeActual = zdt.ToDateTime();
相关问题