好的,我有一个托管在中央标准时间区的 Web 服务器。IIS 服务器已配置为此时区,因此每当在服务器上使用 DateTime.Now 或创建新的 DateTime(kind 属性为 Local)时,它的时间都是中央时间。
问题在于该网站是一个国际应用程序,我可能有来自美国或加拿大任何地方的客户。网站的一个功能是“调度器”,用于安排预约。为了简化开发,我们决定将数据库中所有 DateTime 值以 UTC 格式存储,并且 API 的所有流量也都是 UTC。但问题在于,我经常在服务器端创建日期/时间值时遇到问题。
例如,假设我需要在服务器上为太平洋标准时间区的客户编程创建一个早上 8 点的预约。过去,我曾经做过这样的事情:
var appointment = new new DateTime(2015, 04, 17, 08, 00, 00, DateTimeKind.Unspecified)
var utcAppointment = TimeZoneInfo.ConvertTimeToUtc(appointment,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"))
我在程序中进行许多其他日期/时间操作,现在正在考虑直接转用Nodatime。我知道可以相对容易地从Nodatime变量中获取UTC DateTime。我困惑的是如何为特定时区的特定日期/时间创建一个Nodatime变量?所有我看到的例子都与模式有关,并涉及字符串读取或创建一个实例(基本上是“现在”)。我想做的是将现有的BCL DateTime对象(无论“类型”如何)转换为具有我设置的特定时区的Nodatime对象。我认为Nodatime是一个很棒的库,但只阅读用户指南就让我感到困惑,无法将其转换为BCL。