WCF根据时区自动转换时间

标签 wcf timezone

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

最佳答案

将您从 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();

关于WCF根据时区自动转换时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1356384/

相关文章:

wcf - WCF 如何序列化方法调用?

cakephp - Cake PHP时区错误

android - 默认 Android 时区列表

java - 获取不同时区的相同日期

android - 如何处理 JodaTime 和 Android 的时区数据库差异?

asp.net - WCF+ Entity Framework 设计

WCF net.tcp SSL、证书和用户名+密码认证

c# - 具有.Net 客户端和Android 客户端的WCF 服务器策略?

wcf - WCF 上的 REST 服务的 WebInvoke 方法 =“POST” 或 "GET"

python - 如何处理 Matplotlib 中带时区的时间?