发票中暂存和生产发送日期时间之间的差异
Posted
技术标签:
【中文标题】发票中暂存和生产发送日期时间之间的差异【英文标题】:Difference between Staging and production sent datetime in invoice 【发布时间】:2018-09-28 12:18:29 【问题描述】:我们有 GMT 时区用于暂存和生产。但是当代码执行时,它在暂存中显示正确的结果而在生产中显示不正确。
bool checkTimeBSTorGMT = TimeZoneInfo.Local.IsDaylightSavingTime(records.GetDateTimeOrEmpty("notification_date"));
if (checkTimeBSTorGMT == true)
DateTime dt = new DateTime();
dt = records.GetDateTimeOrEmpty("notification_date");
dt = dt.AddHours(1);
instance.SentDateTime = dt;
else
instance.SentDateTime = records.GetDateTimeOrEmpty("notification_date");
我的代码如上。我希望它应该根据世界各地的用户本地机器获取正确的日期。
【问题讨论】:
这是什么应用程序?当您说“生产”时,您是指某处的某个服务器(例如 Web 服务器)还是用户自己的计算机(例如带有桌面应用程序)?这一切都不同,因为TimeZoneInfo.Local
反映了执行代码的计算机的时区设置。
申请是针对英国国家的,服务器是在那里设置的。
【参考方案1】:
我不会尝试滚动自己的时间和时区代码。会以泪水收场。 (夏令时偏差总是 60 分钟吗?您的代码假设如此)
这是在两个时区之间转换的更好方法。我在其中包含了一些更不寻常的时区。
using System;
public class Program
private static void DisplayTimeInTimeZone(DateTime timeOfInterestUTC, string timezoneId)
Console.WriteLine($"UTC Time timeOfInterestUTC in timezoneId is TimeZoneInfo.ConvertTime(timeOfInterestUTC, TimeZoneInfo.FindSystemTimeZoneById(timezoneId))");
public static void Main()
/*
// In case you were wondering what Timezones are available
foreach (var tz in TimeZoneInfo.GetSystemTimeZones())
Console.WriteLine(tz.Id);
*/
DateTime someArbitraryLocalTime = new DateTime(2018, 2, 15, 9, 30, 0);
DateTime someArbitraryTimeAsUTC = TimeZoneInfo.ConvertTimeToUtc(someArbitraryLocalTime, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"));
Console.WriteLine($"US Eastern Standard Time someArbitraryLocalTime in UTC is someArbitraryTimeAsUTC");
DisplayTimeInTimeZone(someArbitraryTimeAsUTC, "GMT Standard Time");
DisplayTimeInTimeZone(someArbitraryTimeAsUTC, "Cen. Australia Standard Time");
DisplayTimeInTimeZone(someArbitraryTimeAsUTC, "Chatham Islands Standard Time");
DisplayTimeInTimeZone(someArbitraryTimeAsUTC, TimeZoneInfo.Local.Id);
我不清楚关于时区的 notification_date 和 SentDateTime 是什么。如果它们已经是 UTC,那么只需转换它的 ConvertTime 方法。
如果它是参考时区的本地,则需要先使用 ConvertTimeToUtc。如果它来自用户输入,请注意有夏令时的时区不存在某些时间(当 DST 开始时,我们将时钟向前设置一个小时,因此该“小时”中的任何时间都是未定义的)。相反,在 DST 结束时转换是不明确的,因为那个“小时”发生了两次。
【讨论】:
以上是关于发票中暂存和生产发送日期时间之间的差异的主要内容,如果未能解决你的问题,请参考以下文章
当我在 Windows Azure 上交换暂存和生产部署时出现“错误:19 - 物理连接不可用”