为什么1401-01-01星期六在Ruby中,而在星期四在MySQL?

时间:2013-07-28 19:59:07

标签: mysql ruby datetime

在Ruby中:

> require 'time'
=> true
> Date.new(1401, 1, 1).saturday?
=> true

使用MySQL:

SELECT dayofweek('1401-01-01')

这将返回星期四的5

在OSX日历中,这也是星期四。

造成这种差异的原因是什么?

1 个答案:

答案 0 :(得分:8)

强烈怀疑其中一个环境正在考虑从朱利安历法到格里高利历的变化(自16世纪以来的不同时间取决于地点)。

使用我的Noda Time库,我们可以看到哪个是:

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        var julian = new LocalDate(1401, 1, 1, 
                                   CalendarSystem.GetJulianCalendar(4));
        var gregorian = new LocalDate(1401, 1, 1,
                                      CalendarSystem.GetGregorianCalendar(4));

        Console.WriteLine("Julian: {0}", julian.IsoDayOfWeek);
        Console.WriteLine("Gregorian: {1}", gregorian.IsoDayOfWeek);
    }
}

输出:

Saturday
Thursday

所以看起来Ruby已经考虑了过渡,但MySQL没有。

最大的问题是:对哪个日历系统感兴趣? (在1401年你可能想要朱利安一个 - 但如果你在16世纪或更晚的时候有日期,那就变得更加棘手......)