首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#在DateTime.ParseExact中手动指定时区

C#在DateTime.ParseExact中手动指定时区
EN

Stack Overflow用户
提问于 2019-10-03 12:14:47
回答 1查看 538关注 0票数 3

我有一个日志文件,其中包含格式如下的日期/时间字符串:

代码语言:javascript
运行
AI代码解释
复制
2019/10/01 15:30

如您所见,字符串不包含任何时区信息。但是,我确实知道时间在其中所代表的时区。

如果我在我自己的PC上使用这个C#代码,它的本地时区设置是正确的,那么时间将按预期进行解析。我希望将本地时间转换为UTC,以便插入数据库。

代码语言:javascript
运行
AI代码解释
复制
Time.ParseExact("2019/10/01 15:30", "yyyy/MM/dd HH:mm", provider, DateTimeStyles.AdjustToUniversal & DateTimeStyles.AssumeLocal);

但是,如果我在我的Docker主机上运行此代码,它的时区设置为UTC,则时间被解析为UTC。这是有意义的,因为在使用UTC的Docker主机上,AssumeLocal将与UTC相同。

仅仅应用人工偏移是不够的,因为夏令时。此外,其中一些日志是历史的,可以追溯到DST更改之前,因此即使使用算法也会很复杂,而且似乎应该解决一些问题(例如,给定日期和时区,确定它是否在DST中,然后相应地调整到UTC )。

我想要做的是显式地指定时间戳的时区,并让框架同时使用给定的时区和实际的日期来正确地将时间转换为UTC。我看过这个问题这个问题,但它们似乎都依赖于系统本身被设置为您想要假定日期在的时区。

第二个问题似乎已经开始解决假定一个已知时区的问题,但是响应只是在解析的时间上使用GetUtcOffset来确定抵消时间的时间量。这假定时间已经在所需的时区中被解析。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 12:53:54

我相信你要找的是TimeZoneInfo

使用TimeZoneInfo,您可以从TimeZoneInfo.FindSystemTimeZoneById获得所需的信息。

这些Ids是基于操作系统的,但是只要您的所有容器都在Linux上(举个例子),您就可以使用它获得UTC的存储时间。您提到您知道您的字符串位于哪个时区,因此您可能需要一些东西来将其转换为TimeZoneInfo可读的Ids。

TimeZoneInfo.FindSystemTimeZoneById获取的代码示例

代码语言:javascript
运行
AI代码解释
复制
using System;

public class Example
{
   public static void Main()
   {
      // Get time in local time zone 
      DateTime thisTime = DateTime.Now;
      Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                        TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
      // Get Tokyo Standard Time zone
      TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
      DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);      
      Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
                        tst.DaylightName : tst.StandardName, tstTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
   }
}

// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
//       Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
//       Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58226296

复制
相关文章
[golang]在Go中处理时区
当将时区存储在数据库中时,请始终遵循一个标准时区,理想的做法是保存UTC时间,并在显示时区时根据需要将其转化为各种时区。
landv
2019/09/26
4.8K0
[golang]在Go中处理时区
如何强制Hive使用指定时区而非操作系统时区
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在部署CDH集群时由于OS的操作系统指定的时区是UTC,这时如果我们不想修改集群操作系统的时区,在查询数据时如何强制Hive使用指定时区,接下来的文章就介绍如何为Hive指定时区。 内容概述 1.测试前环境查看 2.指定Hive时区 3.验证时区是否生效 测试环境 1.CM5.14
Fayson
2018/07/12
8.6K1
centos在设置时区
[root@localhost ~]# date -R // 查看时区
全栈程序员站长
2022/07/06
1.3K0
在CI4(CodeIgniter 4)中设置时区
在PHP程序设计中,我们时常需要获取到当前时间,但是在CodeIgniter4(以下简称CI4)中默认时间是 America/Chicago 。
逝水经年
2022/01/12
1.6K0
TencentOS手动指定根分区大小
TencentOS使腾讯云推出的一款Linux操作系统,采用基于社区5.4 LTS 深度优化的 tkernel4(简称 tk4)和基于社区4.14 LTS 深度优化的 tkernel3(简称 tk3)内核,具体内核版本需要参考操作系统的版本。
dumpcat
2022/08/11
1.5K0
r2dbc指定时区问题
我想到能在这里配置时区,于是按照警告提示的timezone配置发现不生效、换成serverTimezone依旧不行
阿超
2022/11/12
9370
r2dbc指定时区问题
手动在Linux中源码编译安装httpd
1.由于网络上的RPM包是作者自己用自己机器编译的,并不适合各种平台的硬件平台。 好比作者自己的机器是X86_64架构的,而你的机器是i386,那很不幸运,不适合你,只能下载源码手动安装了。
星哥玩云
2022/06/30
1.6K0
手动在Linux中源码编译安装httpd
手动指定数据源类型
也可以手动指定用来操作的数据源类型。数据源通常需要使用其全限定名来指定,比如parquet是org.apache.spark.sql.parquet。但是Spark SQL内置了一些数据源类型,比如json,parquet,jdbc等等。实际上,通过这个功能,就可以在不同类型的数据源之间进行转换了。比如将json文件中的数据保存到parquet文件中。默认情况下,如果不指定数据源类型,那么就是parquet。
编程那点事
2023/02/25
2790
C# 使用 protobuf 手动生成
微软提供了 gRPC 的 Nuget 包,可以快速的帮我们根据 .proto 文件来生成 gRPC 调用,在某些场景下,我们不引用ms 提供的包能否生成文件呢?答案当然是可以的。
晓晨
2022/05/07
9900
Django 2 DateTimeField格式 在程序中手动赋值
一般在数据模型中设置创建时间、更新时间的时候都会使用DateTimeField的格式,也会设置时间自动设置,示例如下:
Devops海洋的渔夫
2019/09/30
3.2K0
C# ——键盘指定输入
防止输入有误 private void txtC_KeyPress(object sender, KeyPressEventArgs e) { txtKeyPress(sender, e); } private void txtKeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 0x20) e.KeyChar = (c
vv彭
2021/03/15
5120
C# 在指定的IP地址中获得一个设备的MAC(物理)地址
using System.Net; using System.Net.NetworkInformation; /// <summary> /// Holds utilities for working with networks, Ethernet, etc. /// </summary> public static class NetworkUtils { // http://www.codeproject.com/KB/IP/host_info_within_network.aspx
用户8671053
2021/11/02
1.4K0
SpringBoot中Mybatis时区问题
最近遇到一个巨坑的bug,mybatis打印出来sql日志显示数据入库成功,但是数据库查询却怎么也查询不到数据,debug日志打了一堆,硬是没发现任何问题。
林老师带你学编程
2019/07/02
3K0
C# 手动缩放图片帮助方法
部分代码实例 public static string ImageToBase641(string filePath) { try { Bitmap bmp = new Bitmap(filePath); MemoryStream ms = new MemoryStream(); bmp.Save(ms, System.Drawing
await
2022/11/18
3110
C# 手动缩放图片帮助方法
在PHP中如何为匿名函数指定this?
关于闭包匿名函数,在JS中有个很典型的问题就是要给它绑定一个 this 作用域。其实这个问题在PHP中也是存在的,比如下面这段代码:
硬核项目经理
2020/05/13
2.2K0
html标签a在指定iframe框架中打开
常见的html标签就那4个属性,但如果想在指定的iframe框架中打开指定的html,可以有如下代码(例子)实现
说对她这样的不多
2022/04/19
4.7K0
在 FreeBSD 虚拟机中手动安装 VMware Tools
<p class="shortdesc">对于 FreeBSD 虚拟机,您可以使用命令行工具手动安装或升级 VMware Tools。
知忆
2021/06/08
1K0
flash在C#中的应用
很多光盘上的程序,比如电脑迷光盘,开头总有一段动画,用来展现企业品牌和LOGO之用。这个动画是Flash做的,而且嵌入到程序中简直做到无缝融合,因为右键点击它也不会有那特有而烦人的Flash右键菜单。
SAP梦心
2022/05/07
1.8K0
C# 枚举在属性中运用
//默认ZFLText属性值为"Label"  [DefaultValue(typeof(DisplayMode), "Label")]  public DisplayMode ZFLText   {       get;       set;   } [Serializable]     public enum DisplayMode     {         /// <summary>         /// 显示文本         /// </summary>         Label,   
跟着阿笨一起玩NET
2018/09/18
2.3K0
C# 枚举在属性中运用
点击加载更多

相似问题

DateTime.ParseExact,忽略时区

10

正在删除DateTime.ParseExact的时区

10

使用DateTime.ParseExact时,如何指定给定日期的时区?

30

C# DateTime.ParseExact

40

DateTime.ParseExact在c#中省略毫秒?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文