gpt4 book ai didi

c# - C#获取当前用户时区的方法

转载 作者:IT王子 更新时间:2023-10-29 04:08:01 25 4
gpt4 key购买 nike

我正在用 MVC3 构建应用程序,当用户访问我的站点时,我想知道该用户的时区。我想知道如何在 c# 中而不是在 javaScript 中执行此操作?

最佳答案

如前所述,您需要您的客户端告诉您的 ASP.Net 服务器有关它们所处时区的详细信息。

这是一个例子。

我有一个 Angular Controller ,它以 JSON 格式从我的 SQL Server 数据库加载记录列表。问题是,这些记录中的 DateTime 值处于 UTC 时区,我想向用户显示其本地时区的日期/时间。

我使用 JavaScript“getTimezoneOffset()”函数确定用户的时区(以分钟为单位),然后将此值附加到我尝试调用的 JSON 服务的 URL:

$scope.loadSomeDatabaseRecords = function () {

var d = new Date()
var timezoneOffset = d.getTimezoneOffset();

return $http({
url: '/JSON/LoadSomeJSONRecords.aspx?timezoneOffset=' + timezoneOffset,
method: 'GET',
async: true,
cache: false,
headers: { 'Accept': 'application/json', 'Pragma': 'no-cache' }
}).success(function (data) {
$scope.listScheduleLog = data.Results;
});
}

在我的 ASP.Net 代码中,我提取了 timezoneOffset 参数...

int timezoneOffset = 0;

string timezoneStr = Request["timezoneOffset"];
if (!string.IsNullOrEmpty(timezoneStr))
int.TryParse(timezoneStr, out timezoneOffset);

LoadDatabaseRecords(timezoneOffset);

... 并将其传递给我的函数,该函数从数据库中加载记录。

这有点困惑,因为我想对数据库中的每条记录调用我的 C# FromUTCData 函数,但是 LINQ to SQL 无法将原始 SQL 与 C# 函数结合起来.

解决方案是先读入记录,然后遍历它们,将时区偏移应用于每条记录中的 DateTime 字段。

public var LoadDatabaseRecords(int timezoneOffset)
{
MyDatabaseDataContext dc = new MyDatabaseDataContext();

List<MyDatabaseRecords> ListOfRecords = dc.MyDatabaseRecords.ToList();

var results = (from OneRecord in ListOfRecords
select new
{
ID = OneRecord.Log_ID,
Message = OneRecord.Log_Message,
StartTime = FromUTCData(OneRecord.Log_Start_Time, timezoneOffset),
EndTime = FromUTCData(OneRecord.Log_End_Time, timezoneOffset)
}).ToList();

return results;
}

public static DateTime? FromUTCData(DateTime? dt, int timezoneOffset)
{
// Convert a DateTime (which might be null) from UTC timezone
// into the user's timezone.
if (dt == null)
return null;

DateTime newDate = dt.Value - new TimeSpan(timezoneOffset / 60, timezoneOffset % 60, 0);
return newDate;
}

虽然它工作得很好,并且在编写 Web 服务以向世界不同地区的用户显示日期/时间时,这段代码非常有用。

现在,我在苏黎世时间上午 11 点写这篇文章,但如果您在洛杉矶阅读这篇文章,您会发现我是在凌晨 2 点(您的本地时间)编辑的。使用这样的代码,您可以让您的网页显示对您网站的国际用户有意义的日期时间。

呼。

希望这对您有所帮助。

关于c# - C#获取当前用户时区的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8194016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com