我正在 MVC3 中构建一个应用程序,当用户进入我的网站时,我想知道该用户的时区。我想知道如何在 c# 中而不是在 javaScript 中执行此操作?
Best Answer-推荐答案 strong>
如前所述,您需要您的客户端告诉您的 ASP.Net 服务器有关它们所在时区的详细信息。
这是一个例子。
我有一个 Angular Controller ,它从我的 SQL Server 数据库以 JSON 格式加载记录列表。问题是,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', 'ragma': '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/
|