本文告诉大家在拿到任意时区的 DateTimeOffset 对象,将 DateTimeOffset 转换为使用中国的 +8 时区表示的时间

在开始之前,需要说明的是,采用 DateTimeOffset 会比 DateTime 更优的一个点是 DateTimeOffset 是带上时区的,这就意味着方便的在多个不同的时区进行传递和序列化的时候,不会丢失原来的信息

现在也推荐更多的使用 DateTimeOffset 类型而不是 DateTime 类型,除非是明确只有本机时间且后续没有需求变更才会考虑使用 DateTime 类型

可选的转换为任意国家地区的时区时间,可以是先通过 TimeZoneInfo 的 FindSystemTimeZoneById 获取到对应的国家地区的信息,如下面代码获取到中国的信息

                var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");

这里的 FindSystemTimeZoneById 传入的 Id 可选的列表可以参阅你的本机注册表的 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 的列表,详细请看 TimeZoneInfo.FindSystemTimeZoneById(String) 方法 (System) Microsoft Learn

假设能获取到 TimeZoneInfo 那可以通过 GetUtcOffset 获取对比传入的 DateTimeOffset 的时间

     var timeSpan = timeZoneInfo.GetUtcOffset(dateTimeOffset);

如此获取到的 TimeSpan 就是时区之间的差值,相加即可转换为目标国家地区的时间

                var newDateTimeOffset = dateTimeOffset + timeSpan;

以上代码拿到的 newDateTime 就是转换后的时区时间

全部的代码如下,通过以下代码即可将任意时区的时间转换为中国对应的时区的时间

                TimeZoneInfo? timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
TimeSpan timeSpan = timeZoneInfo.GetUtcOffset(dateTimeOffset); DateTimeOffset newDateTimeOffset = dateTimeOffset + timeSpan;

修改 China Standard Time 字符串为其他国家地区的,即可转换为其他国家地区的时区

在有一些奇怪的系统上,会抛出 TimeZoneNotFoundException 异常,此时可以使用固定中国的 +8 小时作为对比 UTC 时间

此时需要先将传入的 DateTimeOffset 转换为 UTC 时间,代码如下

                DateTimeOffset utcDateTimeOffset = dateTimeOffset.ToUniversalTime();

接着直接执行 +8 小时即可转换为中国时间

                TimeSpan timeSpan = TimeSpan.FromHours(8);
DateTimeOffset newDateTimeOffset = utcDateTimeOffset + timeSpan;

全部的代码如下

                DateTimeOffset utcDateTimeOffset = dateTimeOffset.ToUniversalTime();
TimeSpan timeSpan = TimeSpan.FromHours(8);
DateTimeOffset newDateTimeOffset = utcDateTimeOffset + timeSpan;

以上就是转换为中国时间的方法

dotnet 将任意时区的 DateTimeOffset 转换为中国时区时间文本的更多相关文章

  1. PHP时区转换(默认中国时区<Asia/Shanghai>转意大利时区<Europe/Rome>)

    <?php function changeTimeZone($date_time, $format = 'Y-m-d H:i:s', $to = 'Europe/Rome', $from = ' ...

  2. ruby -- 基础学习(三)设置中国时区时间

    Rails连接MYSQL数据库,默认显示UTC时间.如果想要改成中国时区时间,按照下面修改: 在config/application.rb中找到 class Application < Rail ...

  3. 一个带bash,带glibc,中国时区,非root用户可运行crond命令的基于alpine镜像的Dockerfile

    这个镜像现在说起来简单, 带bash(增加执行脚本的兼容性,带GLIBC,中国时区,非root用户可运行crond命令-安全) 但让我开始陷入时,真的让我有段时间有点爆了. 比如,将filebeat文 ...

  4. Mysql -- 设置中国时区时间

       Mysql -- 设置中国时区时间 查看mysql的时区设置 mysql> show variables like '%time_zone%'; 修改mysql的时区设置, 注:mysql ...

  5. CST时区,MYSQL与JAVA-WEB服务器时间相差13个小时的问题

    最近倒腾了一台阿里云主机,打算在上面装点自己的应用.使用docker安装了安装mysql后,发现数据库的存储的时间与java-web应用的时间差8个小时,初步怀疑是docker容器时区的问题.经过一系 ...

  6. jQuery 根据城市时区,选择对应的即时时间

    我们的CRM系统中,下面是用jQuery 做了个时区小插件 如图: // 时区城市//$(function(){//所有城市和时间静态输出//var cityID = 170; //中国,北京//va ...

  7. Python LDAP中的时间戳转换为Linux下时间

    (Get-ADUser zhangsan -Properties badpasswordtime).badpasswordtime返回值为:131172610187388712131172610187 ...

  8. openerp7 时区问题解决--改成本地时区

    由于目前openerp的时区,读取的是UTC时间,而我国本地时间比UTC快8小时 问题就导致,写入数据库的时候时间相差8小时,以及Openerp日志输出时间格式也相差8小时和前端显示问题 1.更改op ...

  9. 将 PCB 文件转换为可读的文本

    将 PCB 文件转换为可读的文本 将元件转成列表. 坐标也放到列表中. 以元件号为排序. 使用 json 格式,并格式,方便对比. 元件网络转成单独文件. 特殊说明生成单独文件.

  10. linux修改服务器时区并使用所选时区的时间

    linux 修改服务器时区并使用所选时区的时间(以 ubuntu18.04 修改为美国芝加哥时区为例) 一.修改时区    /usr/bin/tzselect        1.选择地区, 美洲地区: ...

随机推荐

  1. JavaScript自定义响应式对象

    1. 引言 这里的响应式对象是指JavaScript中的变量与HTML中的内容相绑定,变量更新则内容更新,也叫数据绑定 此时不得不说MVVM架构,MVVM架构思想的实现步骤如下: 模型(Model): ...

  2. VS2010插件NuGet

    下载地址 NuGet Package Manager - Visual Studio Marketplace NuGet包地址 NuGet Gallery | Home

  3. KingbaseES V8R3 集群运维案例--kingbase_monitor.sh启动”two master“案例

    案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...

  4. 基于vue3的Crontab组件

    网上找的没有满意的,决定从若依前后端分离其前端vue2中的crontab进行转换,先上效果 若依: 改后: v2转v3没什么难度,其中有大量的将 this.*** 替换为 ***.value,笔者写了 ...

  5. OpenHarmony使用ArkUI Inspector分析布局

      本文转载自<#2023 盲盒+码 # OpenHarmony使用ArkUI Inspector分析布局>,作者:zhushangyuan_ OpenHarmony使用ArkUI Ins ...

  6. Elasticjob 3.x 最新版本源码解读(含备注源码)

    源码地址(含备注):https://gitee.com/ityml/elastic-job-zgc 官方网站: https://shardingsphere.apache.org/elasticjob ...

  7. 获取 BSTR 字符串长度

    BSTR a = L"hello world"; int len = SysStringByteLen(a);

  8. MogDB/openGauss中merge的语法解析

    MogDB/openGauss 中 merge 的语法解析 近期了解学习了 MogDB/openGauss 中 merge 的使用,merge 语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成 ...

  9. 带你走进红帽企业级 Linux 6体验之旅(安装篇)

    红帽在11月10日发布了其企业级Linux,RHEL 6的正式版(51CTO编辑注:红帽官方已经不用RHEL这个简称了,其全称叫做Red Hat Enterprise Linux).新版带来了将近18 ...

  10. 抓包整理外篇——————https 抓包 [ 五]

    前言 简单介绍一下https 抓包. 正文 可能有人一开始的时候发现抓包都抓不到,原因也很简单,那是因为https 需要解密. 那么为什么https 不解密呢? 那是因为证书信任问题. 下面先介绍,上 ...