ルビーの場合:
> require 'time'
=> true
> Date.new(1401, 1, 1).saturday?
=> true
MySQL の場合:
SELECT dayofweek('1401-01-01')
5
これは木曜日に戻ります。
OSX カレンダーでは、これも木曜日です。
この不一致の原因は何ですか?
これらの環境の 1 つは、ユリウス暦からグレゴリオ暦への変更 (場所によって 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 世紀以降の日付がある場合は、より複雑になります...)