如何为C#桌面应用程序设置默认时区?

时间:2019-04-25 04:54:21

标签: c# api

我有一个使用API​​的c#桌面应用程序。我的客户来自其他时区。因此,当我们使用相同的API时,即使数据库中的日期相同,我们也会获得不同的日期时间。如何在C#代码中为应用程序设置默认时区,以便从开发环境访问时区时可以设置时区,而在生产环境中部署时区时可以设置客户端的时区?我已经调试过,发现.NET从API获得响应后便会自动转换时间,因此我无法在响应流中做任何事情。

3 个答案:

答案 0 :(得分:0)

如果dateTime对于您和您的客户而言正在发生变化,则意味着从API检索dateTime时,dateTime会附加一个偏移值。

因此,请检查您的应用程序中的开发环境,并使用DateTimeOffset类型的“ UtcDateTime”属性获取UTC DateTime并将其显示在UI中,以便您和您的客户端都可以使用。如果是生产环境,请保持正常运行。

if(IsDevEnvironment)
   DateTimeToDisplay = ApiResponse.DateTimeInDB.UtcDateTime;  // assuming DateTimeInDB is of DateTimeOffset type
else
   DateTimeToDisplay = ApiResponse.DateTimeInDB

答案 1 :(得分:-1)

尝试;

HAVING        (Time BETWEEN DATEADD(d, - 1, GETUTCDATE()) AND GETUTCDATE())

对我有帮助。

示例

ELECT        Time, username, COUNT(username) AS CountOfusername
FROM            dbo.tabl
GROUP BY Time, username
HAVING        (Time BETWEEN DATEADD(d, - 1, GETUTCDATE()) AND GETUTCDATE())

编辑

 DateTime hwTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "Arab Standard Time");
        //DateTime hwTime = new DateTime();
        try
        {
            TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Arab Standard Time");
            Console.WriteLine("{0} {1} is {2} local time.",
                    hwTime,
                    hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName,
                    TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
        }
        catch (TimeZoneNotFoundException)
        {
            Console.WriteLine("The registry does not define the Arab Standard Time zone.");
        }
        catch (InvalidTimeZoneException)
        {
            Console.WriteLine("Registry data on the Arab Standard Time zone has been corrupted.");
        }

在您的应用程序中使用此代码

答案 2 :(得分:-1)

这是一种设置时区的方法,例如东部时区。

TimeZoneInfo easternZone;
try { easternZone = TimeZoneInfo.FindSystemTimeZoneById("E. Africa Standard Time"); }
catch (TimeZoneNotFoundException) { easternZone = TimeZoneInfo.FindSystemTimeZoneById("Africa/Nairobi"); }
var timestamp = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, easternZone);