我应该使用 DateTime UTC 进行国际申请吗

Should I use DateTime UTC for an international application

我正在编写一个正在部署到 Azure 网站的 MVC 5 互联网应用程序。此应用程序将在国际上使用,我想知道存储任何 DateTime 值是否应使用 UTC 时间?

这是一个示例:我有一个具有开始日期时间值和结束日期时间值的对象。这些值由用户设置,用于确定是否应向用户显示数据。如果当前日期时间值介于开始日期时间和结束日期时间之间,则显示数据。

因为我的应用程序将在国际上使用,并且有不同的时区,我应该将开始日期时间值和结束日期时间值存储为具有 UTC 的 DateTime 对象,还是标准的 DateTime 值将全部那是需要的吗?我是否需要担心设置和显示不同时区的 DateTime 值,或者这是否包含在 DateTime 对象中?

提前致谢。

编辑

编辑存储为 UTC 的日期时间时如何。

如果我有一个在对象中存储为 UTC 的日期时间,并且用户想要更改此值,我是否需要将日期时间(显示为 .ToLocalTime())转换回 UTC 日期时间当我在编辑此值后将其存储回数据库时?

EDIT2

你能快速看一下我编码的这些函数,确保编码正确吗?

public DateTime ConvertUTCDateTimeToLocalTime(DateTime utcDateTime)
{
    DateTime convertedDate = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc);
    return convertedDate.ToLocalTime();
}

public DateTime ConvertLocalDateTimeToUniversalTime(DateTime localDateTime)
{
    DateTime convertedDate = DateTime.SpecifyKind(localDateTime, DateTimeKind.Local);
    return convertedDate.ToUniversalTime();
}

public DateTime ConvertUTCDateTimeToLocalTime(string utcDateTime)
{
    DateTime convertedDate = DateTime.SpecifyKind(DateTime.Parse(utcDateTime.ToString()), DateTimeKind.Utc);
    return convertedDate.ToLocalTime();
}

public DateTime ConvertLocalDateTimeToUniversalTime(string localDateTime)
{
    DateTime convertedDate = DateTime.SpecifyKind(DateTime.Parse(localDateTime.ToString()), DateTimeKind.Local);
    return convertedDate.ToUniversalTime();
}

一般来说,您应该更喜欢使用 DateTime.UtcNow in your backend. First advantage is that you don't have to care about timezones and second, you don't have to do any calculations for Daylight Saving Times (read more in this article)。 .NET 为您提供了强大的功能,您不必太在意上面提到的两点。另一方面,你不应该在你的前端显示 UTC 时间。这可能会惹恼您的用户,但是 .NET 的功能在这里发挥了作用。如果您有 UTC 日期,您可以轻松地将其转换为本地时间,以便通过以下方式将其显示给您的用户:

DateTime convertedDate = DateTime.SpecifyKind(
  DateTime.Parse(dateStr),
  DateTimeKind.Utc);
DateTime dt = convertedDate.ToLocalTime();

该片段摘自 this thread 上的 Drew Noakes 回答,这是关于如何将日期转换为当地时间的精彩讨论。

编辑

关于您的编辑:是的,您必须这样做。否则日期将以当地时间存储。