標準時和夏令時
夏令時
即 Daylight Saving Time,每年
3月第2個星期日凌晨02:00
開始,到
11月第1個星期日凌晨02:00
為止。
由來
夏令時開始後,時鐘會撥快一個小時,據說其本意是讓人們早睡早起,以達到節約能源的目的 —— 早點睡就不用開燈了嘛。夏令時的另一個功用,是讓人們在下班後,有足夠的時間與孩子們在戶外玩耍。春夏回暖,是戶外活動的好季節。調成夏令時後,即使是晚上8點,外頭仍舊有足夠的亮度,讓孩子們安全玩耍。
夏令時在11月才結束的原因也是為了兒童安全。10月31日是萬聖節,小孩子晚上會出去討糖果,因為是夏令時,晚上7、8點小孩子出去的時候,天色還夠亮,家長也放心些。
帶來的問題
每年一次的“空白1小時”(2020-03-08)
兩點整 過了1秒之後是 三點零一分
當前時刻:0
2
:00:00
PST
當前時刻:0
3
:00:00
PDT
當前時刻的下一秒:03:00:01
PDT
每年一次的“重複1小時”(2020-11-01)
一點到兩點過完之後會再次經過一邊
01:00:00 DST —— 02:00:00
DST
01:00:00 PST —— 02:00:00
PST
我們的問題
描述:運營在配置排期的時候會選擇:年、月、日、時、分、秒(含義: 美國當地時間xxxx-xx-xx xx:xx:xx)
前提:
在需要我們自己處理排期邏輯的情況下(氛圍直出)
運營配置視覺化,不要配置時間戳之類的
我們不希望運營感知到夏令時的存在(歷史處理方式: 選擇 -800 或者 -700)
如何解決
首先假設配置的時刻是標準時,拿到時間戳
透過某些方法判斷時間戳代表的這一刻是否是夏令時
非夏令時:假設正確,不做任何處理
夏令時:假設不正確,還原1小時時差的時間戳
得到正確的時間戳
Node服務端獲取某年夏令時的起止時間
var moment = require(‘moment-timezone’);
// 夏令時開始時間(包含此時間點)【標準時 ——> 夏令時】
function getDSTStartTimestamp(year) {
const str = `${year}-03-01 02:00:00 -800`;
const d = new Date(str);
const m = moment(d)。tz(“America/Los_Angeles”);
let weekday = m。weekday();
if (weekday === 0) {
weekday = 7;
}
const offsetDay = 7 * 2 - weekday;
const timestamp = d。getTime() + offsetDay * 24 * 60 * 60 * 1000;
return timestamp;
}
// 夏令時結束時間(不包含此時間點)【夏令時 ——> 標準時】
function getDSTEndTimestamp(year) {
const str = `${year}-11-01 02:00:00 -700`;
const d = new Date(str);
const m = moment(d)。tz(“America/Los_Angeles”);
let weekday = m。weekday();
if (weekday === 0) {
weekday = 7;
}
const offsetDay = 7 - weekday;
const timestamp = d。getTime() + offsetDay * 24 * 60 * 60 * 1000;
return timestamp;
}
const s = getDSTStartTimestamp(‘2020’);
const e = getDSTEndTimestamp(‘2020’);
const startDate = moment(new Date(s))。tz(“America/Los_Angeles”);
const endDate = moment(new Date(e))。tz(“America/Los_Angeles”);
console。log(‘startDate’, s, startDate, startDate。isDST());
// 夏令時開始時間:startDate 1583661600000 Moment<2020-03-08T03:00:00-07:00> true
console。log(‘endDate’, e, endDate, endDate。isDST());
// 夏令時結束時間:endDate 1604221200000 Moment<2020-11-01T01:00:00-08:00> false
參考
《美國時間時區及夏令時簡介》
https://
gonglue。us/8593
《UTC和GMT》:
https://www。
cnblogs。com/champyin/p/
12767852。html
上一篇:雲頂上分陣容推薦:八斗腕豪
下一篇:遇到噁心的同宿舍的怎麼辦?