OStack程序员社区-中国程序员成长平台

标题: c# - 如何在c#中获取当前用户时区 [打印本页]

作者: 菜鸟教程小白    时间: 2022-8-20 17:47
标题: c# - 如何在c#中获取当前用户时区

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



Best Answer-推荐答案


如前所述,您需要您的客户端告诉您的 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4