我试图让 C# 和 JS 在 JSDate和 .NETDateTime对象上添加分钟数时生成相同的结果。我的系统使用希腊文化设置,但很可能您会在您的计算机上得到类似的结果(如果您使用这些值)。我有这个使用 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 πμ
...并且在使用不变文化进行打印时:
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
有人能告诉我为什么会得到不同的结果吗?系统设置是相同的,我尝试使用两者CurrentCulture,但 CreateSpecificCulture("el-GR")没有得到与 JS 结果有任何相似之处。
我什至用JS创建了自己的addMinutes(),但仍然有同样的问题。
看起来 JS 正好在开始日期后的 100980 分钟执行夏令时切换(如果添加 100979 分钟,您就会看到这一点),但 C# 却没有!根据维基百科,JS 的行为是正确的行为。但到目前为止我非常确定 .NET 也是正确的。根据我所做的快速测试,C# 似乎在 70.2 天前进行了切换。
在向日期添加分钟数时,为了在两种语言之间获得相同的结果,我需要做什么?
Helenr
繁华开满天机
相关分类