微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

Ruby中:

> 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年你可能想要朱利安一个 – 但如果你在16世纪或更晚的时候有日期,那就变得更加棘手……)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐