我試圖讓 C# 和 JS 在 JSDate和 .NETDateTime對(duì)象上添加分鐘數(shù)時(shí)生成相同的結(jié)果。我的系統(tǒng)使用希臘文化設(shè)置,但很可能您會(huì)在您的計(jì)算機(jī)上得到類似的結(jié)果(如果您使用這些值)。我有這個(gè)使用 moment.js 的 JS 代碼:var dt1 = new Date(2020, 0, 19, 0, 0, 0);var m1 = moment(dt1);[m1.toString(), m1.add(100980, 'minutes').toString()]> ["Sun Jan 19 2020 00:00:00 GMT+0200", "Sun Mar 29 2020 04:00:00 GMT+0300"]..LinqPad 中的 C# 代碼:var ci = CultureInfo.CreateSpecificCulture("el-GR"); //CultureInfo.InvariantCulture; //CultureInfo.CurrentCulture;var dt = new DateTime(2020, 1, 19, 0, 0, 0, 0, ci.Calendar, DateTimeKind.Local);dt.ToString("G", ci).Dump();var dt2 = dt.AddMinutes(100980);dt2.ToString("G", ci).Dump();> 19/1/2020 12:00:00 πμ> 29/3/2020 3:00:00 πμ...并且在使用不變文化進(jìn)行打印時(shí):var ci = CultureInfo.CreateSpecificCulture("el-GR"); //CultureInfo.InvariantCulture; //CultureInfo.CurrentCulture;var dt = new DateTime(2020, 1, 19, 0, 0, 0, 0, ci.Calendar, DateTimeKind.Local);dt.ToString("G", CultureInfo.InvariantCulture).Dump();var dt2 = dt.AddMinutes(100980);dt2.ToString("G", CultureInfo.InvariantCulture).Dump();> 01/19/2020 00:00:00> 03/29/2020 03:00:00有人能告訴我為什么會(huì)得到不同的結(jié)果嗎?系統(tǒng)設(shè)置是相同的,我嘗試使用兩者CurrentCulture,但 CreateSpecificCulture("el-GR")沒(méi)有得到與 JS 結(jié)果有任何相似之處。我什至用JS創(chuàng)建了自己的addMinutes(),但仍然有同樣的問(wèn)題??雌饋?lái) JS 正好在開(kāi)始日期后的 100980 分鐘執(zhí)行夏令時(shí)切換(如果添加 100979 分鐘,您就會(huì)看到這一點(diǎn)),但 C# 卻沒(méi)有!根據(jù)維基百科,JS 的行為是正確的行為。但到目前為止我非常確定 .NET 也是正確的。根據(jù)我所做的快速測(cè)試,C# 似乎在 70.2 天前進(jìn)行了切換。在向日期添加分鐘數(shù)時(shí),為了在兩種語(yǔ)言之間獲得相同的結(jié)果,我需要做什么?
2 回答

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
問(wèn)題是調(diào)用是在withAddMinutes
上完成的。盡管有這種標(biāo)記,但對(duì)象的數(shù)學(xué)運(yùn)算并不考慮時(shí)區(qū)。 即使是當(dāng)?shù)貢r(shí)間。DateTime
DateTimeKind.Local
DateTime
由于您使用的是本地類型,因此您可以簡(jiǎn)單地轉(zhuǎn)換為 UTC,進(jìn)行數(shù)學(xué)計(jì)算,然后再轉(zhuǎn)換回來(lái)。
var dt2 = dt.ToUniversalTime().AddMinutes(100980).ToLocalTime();
您可能還想考慮使用該DateTimeOffset
類型,并使用TimeZoneInfo.ConvertTime
.

繁華開(kāi)滿天機(jī)
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
NodaTime
正如我在問(wèn)題更新中所寫的那樣,我最終使用了。
它仍然不同意moment.js
所有的時(shí)間,但我覺(jué)得它更經(jīng)常地同意它。
我想夏令時(shí)是一個(gè)巨大的混亂,沒(méi)有人能夠很好地處理它。
- 2 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)
0/150
提交
取消