WCF自动根据时区转换时间

6 wcf timezone

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

jri*_*sta 4

将您从 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
Run Code Online (Sandbox Code Playgroud)

如果您确实需要表示相应时区的时间,则需要将时区信息与日期时间一起发送。我建议创建一个封装这两条信息的类型,然后返回该类型,而不是返回 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();
Run Code Online (Sandbox Code Playgroud)