在红宝石中:
> require 'time'
=> true
> Date.new(1401, 1, 1).saturday?
=> true
使用 MySQL:
SELECT dayofweek('1401-01-01')
这将返回5
星期四。
在 OSX 日历中,这也是星期四。
是什么导致了这种差异?
我强烈怀疑其中一种环境正在考虑从儒略历到公历的变化(自 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 世纪或更晚的日期,那就更棘手了……)