• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# - 如何在c#中获取当前用户时区

[复制链接]
菜鸟教程小白 发表于 2022-8-20 17:47:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap