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