3

ルビーの場合:

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

MySQL の場合:

SELECT dayofweek('1401-01-01')

5これは木曜日に戻ります。

OSX カレンダーでは、これも木曜日です。

この不一致の原因は何ですか?

4

1 に答える 1

8

これらの環境の 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 世紀以降の日付がある場合は、より複雑になります...)

于 2013-07-28T20:00:34.463 に答える