参考:《百度百科:夏令时》
夏令时是个奇怪且别扭的东西,中国曾经实行过6年(1986年到1991年),之后便废除了。
那么什么是夏令时的呢?
因为夏季天亮的早、黑的晚,而人们还是以冬季的时间点作息,导致起的晚浪费了阳光,睡的晚浪费了蜡烛,所以就人为的在夏季到来时的某天夜里2点偷偷的将时间调快1小时,然后在夏季结束时的某天夜里2点偷偷的将时间调慢1小时。
上面的一听就很别扭,还有人为改时间的!!! 调整作息时间不就行了吗!
事实上,我们也仅在1986-1991年执行了6年而已,之后便废除了,现在我们都是夏季和冬季到来时调整作息时间的。
假如,我们使用夏令时会有什么影响呢?
- 夏季到来时,比如:1986年5月4日,在夜里凌晨2点你的表突然跳到了3点,这样你就少睡了一小时。。。
- 冬季到来时,比如:1986年9月14日,在夜里凌晨2点你的表突然跳到1点,这样你就多睡了一小时。。。
- 如果你恰好在这个时间段设置了定时任务,那么,你会发现,你的定时任务可能触发了两次,也可能没触发。。。
虽然我国废除了夏令时,但不代表其他国家也废除了,比如说美国目前就实行夏令时。
但,夏令时在全球已经明显不受欢迎了,
- 俄罗斯: 实行了很长时间,最终2014年通过杜马法案废除了。
- 西班牙:还在偷偷改时间。
- 美国:不仅偷偷改时间,而且各个州的时区不一样,所以重要会议一般都会标注时区。
- 全球有110多个国家在使用夏令时。
- 欧盟正在废除夏令时的路上。
另外,想查看哪些地区支持夏令时,可以在电脑的时区设置中发现:
由于工作需要我们有时常常需要转化当地时间为其它时区的时间,或是把某一个时区的时间,转成另一个时区。
最近由于用了一些C#的方法,下面小结一下,省得过后自已又忘了。
1。 用如下的方法,可以得到所有的时区信息。
TimeZoneInfo.GetSystemTimeZones()
2。得到时区ID
TimeZoneInfo.GetSystemTimeZones()[75].ID
一. 时间的类型
1. 背景
这里为什么要介绍时间类型呢,明明是定时调度篇,原因是在定时任务
中,任务什么时间开始执行,什么时间结束执行,要用到各种各样的时间模式,虽然这不能算是一个复杂的问题,但在正式介绍Quartz.Net之前,还是很有必要补充一下的,该章节就是解决这类问题的。
2. 时间类型
时间类型主要有两类:
DateTime和
DateTimeOffset
var
dateTime =
DateTimeOffset.Parse("2022-02-20T13:04+08:00");
Console.WriteLine(
dateTime.ToString("yyyy-MM-ddTHH:mmzzz"));
参考文档:
c#:
时区、
DateTime和
DateTimeOffset - .Neter1 - 博客园 (cnblogs.com)
C#中的DateTime在逻辑上有个非常严重的缺陷:
DateTime d = DateTime.Now;
DateTime d2 = d.ToUniversalTime();
Console.WriteLine("{0}", d);
Console.WriteLine("{0}", d2);
var result = (d == d2);
Console.WriteLine("...
2.使用场景
例如:mysql数据库
中的
datetime字段没有
时区概念 ,所以可存
DateTimeOffset且
时区偏移量为0的时间(相当于存UTC时间),取出来按当地
时区还原即可
3.常用的
DateTimeOffset 的构造
第一种:new
DateTimeOffset(2008, 6, 18, 7, 0, 0, new TimeSpan(-5, 0, 0));
第二种:
DateTime b
DateTime 和 DateTimeOffset 都是 C# 中用来表示日期和时间的类型。
DateTime 类型表示一个日期和时间的值,精确到毫秒级别。它包含了年、月、日、时、分、秒和毫秒信息,但没有时区信息。DateTime 类型适合用于表示与时区无关的日期和时间,比如记录事件发生的时间。
DateTimeOffset 类型也表示一个日期和时间的值,但相比于 DateTime,它多了时区信息。DateTimeOffset 包含了年、月、日、时、分、秒和毫秒信息,同时也包含了一个偏移量,指示了此日期和时间与协调世界时(UTC)之间的差距。这使得 DateTimeOffset 类型能够更好地处理跨时区的场景。
你可以使用 DateTime.Now 属性获取当前本地时间,或者使用 DateTime.UtcNow 属性获取当前协调世界时(UTC)时间。
以下是使用 DateTime 和 DateTimeOffset 的示例:
```csharp
// 使用 DateTime 表示一个日期和时间
DateTime dateTime = new DateTime(2022, 1, 1, 12, 0, 0);
Console.WriteLine(dateTime); // 输出: 2022/1/1 12:00:00 AM
// 使用 DateTimeOffset 表示一个带有时区偏移的日期和时间
DateTimeOffset dateTimeOffset = new DateTimeOffset(2022, 1, 1, 12, 0, 0, TimeSpan.FromHours(8));
Console.WriteLine(dateTimeOffset); // 输出: 2022/1/1 12:00:00 PM +08:00
希望能解答你的问题!如果还有其他问题,请继续提问。