如何处理时区差异

时间:2016-08-05 12:16:26

标签: c# .net datetime

我的应用程序使用BST时区(UTC + 1)和另一个应用程序,我使用上面指定的应用程序中的值。在我的第二台服务器上,时区是UTC。 因此,当我在datetime属性中获得价值时,存在一小时的差异,因此价值出错。 我无法在两台服务器上调整时区。如何使用.net。

将值转换为第二个应用程序中的BST时区
public DateTime? EmploymentStartDate { get; set; }

这是我模特中的财产。

我的第一台服务器的值是29/8/2001 00:00:00,当时到达时区为UTC的第二台服务器是28/9/2001 23:00:00。

5 个答案:

答案 0 :(得分:0)

我同意Daniel A. White。您应将所有内容存储为UTC,并将日期转换为客户端上的本地日期。

看这个https://msdn.microsoft.com/en-us/en-en/library/system.timezoneinfo.converttimefromutc(v=vs.100).aspx

答案 1 :(得分:0)

很简单,您必须始终以UTC格式考虑所有DateTime,因此只需调用ToUniversalTime()即可转换UTC时区中的每个实例:

std::function::operator()

答案 2 :(得分:0)

    private DateTime? _employmentStartDate;
    public DateTime? EmploymentStartDate
    {
        get
        {
            return _employmentStartDate != null ? TimeZoneInfo.ConvertTimeFromUtc(_employmentStartDate.Value, TimeZoneInfo.Local) : new DateTime();
        }
        set
        {
            _employmentStartDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)value);
        }
    }

答案 3 :(得分:0)

另请参阅之前的StackOverflow帖子:

Should MySQL have its timezone set to UTC?

本文(以及它链接到的许多其他文章和网页)讨论了MySQL,但任何数据库和编程语言的关注点和技术都是类似的。

答案 4 :(得分:0)

虽然您(OP的)问题似乎是关于如何在时区之间转换时间信息,但评论中的讨论在选择存储格式的主题上变得越来越热门。首先要做的是 - 要将您的UTC时间转换为BST,您可以使用TimeZoneInfo.ConvertTimeFromUtc。此方法“将协调世界时(UTC)转换为指定时区的时间。”

以下是一个例子:

var bstZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Daylight Time");
bstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, bstZone);

NB 1 :如果你真正想要的是当执行时服务器上的本地时间,显然你应该使用ToLocalTime(),这将产生如果本地时间恰好是BST (且Kind变量的DateTime属性不是DateTimeKind.Local),则会得到相同的结果。

NB 2 :据我所知,TimeZoneInfo课程引用了英国夏令时"作为" GMT日光时间",我假设这就是你所说的BST。但是不要相信我的话 - 你需要确保自己拥有合适的时区ID。

现在,关于存储:

TL; DR

没有时区信息的时间签名是不可靠的信息。鉴于这一前提,但是没有真正的“对或错”时区可用于存储。虽然大多数人可能会认为UTC被认为是最佳实践,但首先,这些信息(它在UTC中)仍然应该与时间戳一起明确存储,其次,可能有其他格式的实际原因在特定情况下更可取。

在对时间值执行算术计算时,您应该使用通用时间表示来避免在夏令时等方面出现打嗝。

厌倦了序列化和反序列化机制可能产生的并发症,这些机制会对您提供的信息做出错误的假设,例如: System.XML.Serialization或数据库引擎。

显然,在展示您的时间信息时(也就是说,在创建适合人类解释的字符串表示时),您应该以用户期望的任何格式进行。无论您如何保留您的值,都可能需要进行转换(带偏移量)。

查看这些链接以获取更多信息: