如何表示各个时区的时间DateTime.ToString

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何表示各个时区的时间DateTime.ToString相关的知识,希望对你有一定的参考价值。

在.Net Framework 1.1平台下,从个人体验谈谈如何处理日期时间格式。
1. 默认情况下,DateTime.Now.ToString()的输出与Control Panel中Date/Time的设置格式相关。
For example, 当Regional Options中Time设置:
Time format: h:mm:ss tt
AM symbol: 上午
PM symbol:下午

Console.WriteLine(DateTime.Now.ToString());
输出结果:12/6/2004 2:37:37 下午

DateTime.Parse("12/6/2004 2:37:37 下午")
OK

// 将日期和时间的指定 String 表示形式转换成其等效的 SqlDateTime
SqlDateTime.Parse("12/6/2004 2:37:37 下午")
Exception:String was not recognized as a valid DateTime.

SqlDateTime.Parse("12/6/2004 2:37:37 PM")
OK

2. 通过DateTime.ToString(string format)方法,使用指定格式format将此实例的值转换成其等效的字符串表示。
DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")
输出结果:12/06/2004 14:56:37
此时,DateTime的输出格式由format参数控制,与Regional Options中的Date/Time的设置无关。不过,如果项目中有很多地方需要进行DateTime日期时间格式控制,这样写起来就比较麻烦,虽然可以通过常数const进行控制。

3. 为当前线程的区域性创建 DateTimeFormatInfo。
// Sets the CurrentCulture property to U.S. English.
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);

Console.WriteLine(DateTime.Now.ToString());
输出结果:12/6/2004 2:37:37 PM

若要为特定区域性创建 DateTimeFormatInfo,请为该区域性创建 CultureInfo 并检索 CultureInfo.DateTimeFormat 属性。
// Creates and initializes a DateTimeFormatInfo associated with the en-US culture.
DateTimeFormatInfo myDTFI = new CultureInfo( "en-US", false).DateTimeFormat;

DateTimeFormatInfo 的实例可以针对特定区域性或固定区域性创建,但不能针对非特定区域性创建。非特定区域性不提供显示正确日期格式所需的足够信息。如果试图使用非特定区域性创建 DateTimeFormatInfo 的实例,将发生异常
参考技术A 找了半天资料,才找到原因
This profile defines two ways of handling time zone offsets:
有两种方式处理时区的时差

Times are expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z").
如果是UTC时间的话,后面需要加Z表示。1994-11-05T13:15:30Z

Times are expressed in local time, together with a time zone offset in hours and minutes.
A time zone offset of "+hh:mm" indicates that the date/time uses a local time zone which is "hh" hours and "mm" minutes ahead of UTC.
A time zone offset of "-hh:mm" indicates that the date/time uses a local time zone which is "hh" hours and "mm" minutes behind UTC.
其它的时间,在年月日时分秒后面,通过+-时差来表示。
如果时间比UTC时间快的话,就用+hh:mm表示,后面的时间表示相差的时间。
如果时间比UTC时间慢的话,就用-hh:mm表示,后面的时间表示相差的时间。

+hh:mm和-hh:mm实际上表示的是时区,+08:00表示的是东八区,-05:00表示的是西五区

有两种方式来说明时间
1994-11-05T08:15:30-05:00 corresponds to November 5, 1994, 8:15:30 am, US Eastern Standard Time.
//时间是1994-11-05 08:15:30 表示的是西五区的时间,比UTC时间慢5个小时 换算成UTC时间的话,需要加上5个小时,就是1994-11-05 13:15:30

1994-11-05T16:15:30+08:00 表示的是东八区的时间,比UTC时间快8个小时 换算成UTC时间的话,需要减去8个小时,就是1994-11-05 13:15:30

1994-11-05T13:15:30Z corresponds to the same instant.//很明显是UTC时间

以上是关于如何表示各个时区的时间DateTime.ToString的主要内容,如果未能解决你的问题,请参考以下文章

各个国家区时中的分钟秒钟都是同样的吧,只是小时数不同是吗

linux下如何修改时区(TIMEZONE)

如何在 python 中使用带有 datetime 对象的时区?

如何在 python 中使用带有 datetime 对象的时区?

时区的坑,不想再踩了

Linux修改时间以及时区