Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发票中暂存和生产发送日期时间之间的差异_C#_Timezone_Timezone Offset_Gmt - Fatal编程技术网

C# 发票中暂存和生产发送日期时间之间的差异

C# 发票中暂存和生产发送日期时间之间的差异,c#,timezone,timezone-offset,gmt,C#,Timezone,Timezone Offset,Gmt,我们有GMT时区用于登台和制作。但当代码执行时,它在暂存中显示正确的结果,在生产中显示错误的结果 bool checkTimeBSTorGMT = TimeZoneInfo.Local.IsDaylightSavingTime(records.GetDateTimeOrEmpty("notification_date")); if (checkTimeBSTorGMT == true) { DateTime dt = new DateTime(); dt = records.Ge

我们有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");
}

我的代码如上所述。我希望它能够根据用户在世界各地的本地机器获取正确的日期

我不会尝试使用自己的时间和时区代码。它将以眼泪结束。(夏令时偏差是否始终为60分钟?您的代码假定为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);
    }
}
我不清楚时区的通知日期和发送日期时间。如果它们已经是UTC,那么它就是您需要转换它的ConvertTime方法


如果它是参考时区的本地,则需要首先使用ConvertTimeToUtc。如果它来自用户输入,请注意,对于具有夏令时的时区,某些时间是不存在的(当DST启动时,我们将时钟向前拨一小时,因此该“小时”中的任何时间都是未定义的)。相反,转换在DST结束时是不明确的,因为“小时”发生了两次。

这是什么类型的应用程序?当你说“生产”时,你是指某个地方的服务器(如web服务器)还是用户自己的计算机(如带有桌面应用程序)?由于
TimeZoneInfo.Local
反映了执行代码的计算机的时区设置,因此它会产生所有差异。应用程序适用于英国国家,服务器设置在那里。