本文告诉大家在拿到任意时区的 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. 03.Java数据结构问题

    目录介绍 3.0.0.1 在arrayList中System.arraycopy()和Arrays.copyOf()方法区别联系?System.arraycopy()和Arrays.copyOf()代 ...

  2. Echarts入门案例教程

    一.定义容器变量并获取页面div元素 1 var chartDom = document.getElementById('chart3'); 二.初始化容器 1 var myChart = echar ...

  3. .NET Core 多线程的用法,以及用例

    1.使用 Thread 类 Thread 类是 .NET 中最基本的多线程操作方式之一,可以使用它创建并启动新线程.以下是一个简单的例子,创建一个新的线程并运行: using System; usin ...

  4. 官宣!禅道与极狐(GitLab)达成深度合作,携手推进开源开放DevOps生态发展

    近日,禅道与著名编程开源开发平台极狐(GitLab)公司签署战略合作,双方将重点探索适用于中国用户DevOps全生命周期解决方案,并将在开源培训和教育.云服务解决方案等多个领域深度合作,共同助力国内D ...

  5. Codeforces Round #726 (Div. 2)

    CF1537A Arithmetic Array 洛谷传送门 CF1537A 分析 用这 \(n\) 个数的总和 \(sum\) 判断: 如果 \(sum<n\) 直接用 \(n-sum+1\) ...

  6. CentOS 9 安装 Nginx 模块 `subs_filter`

    sub_filter 和 subs_filter 区别 sub_filter( 0.7.24):替换响应体(Response Body)中的文本,只能设置一组替换. subs_filter:替换响应体 ...

  7. 前端常用库 CDN

    jQuery 链接: v1.9.1:https://i.mazey.net/lib/jquery/1.9.1/jquery.min.js v2.1.1:https://i.mazey.net/lib/ ...

  8. HTTP协议安全头部的笔记

    本文于2016年3月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 近日项目组对当前开发.维护的Web系统做了AppScan扫描,扫描的结 ...

  9. OpenHarmony轻松玩转GIF数据渲染

    OpenAtom OpenHarmony(以下简称"OpenHarmony")提供了Image组件支持GIF动图的播放,但是缺乏扩展能力,不支持播放控制等.今天介绍一款三方库--o ...

  10. centos部署Django二:项目上传及测试

    1. 上传项目 用 ftp 或者 sftp 上传项目到服务器. *:如果上传时,报各种错误,可以考虑下是不是服务器中文件夹权限的问题.如果是权限的问题,可以使用命令修改文件夹权限后在上传:chmod ...