3

在红宝石中:

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

使用 MySQL:

SELECT dayofweek('1401-01-01')

这将返回5星期四。

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

是什么导致了这种差异?

4

1 回答 1

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 年,你可能想要 Julian ——但如果你有 16 世纪或更晚的日期,那就更棘手了……)

于 2013-07-28T20:00:34.463 回答