1582年10月4日の翌日は?
はじめに
以下の記事を読んでたら、
1582/10/4の翌日がほんとに1582/10/15になるかを確かめたくなった。
nagise.hatenablog.jp
というわけで、今回はJavaとPHPとPythonとGoで検証をしてみた。
結論
Javaのみ1582/10/4の翌日が1582/10/15になった。
PHPとPythonとGoは1582/10/4の翌日が1582/10/5だった。
各言語のバージョン
ローカルPCに入っているバージョンを使用。*1
検証
■Java
Javaは内部的にユリウス暦とグレゴリオ暦の切り替えを行っている。
ソースコード
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(1582, Calendar.OCTOBER, 4);
System.out.println(c.getTime());
c.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(c.getTime());
System.out.println("---------------");
c = new GregorianCalendar(1582, Calendar.OCTOBER, 4);
System.out.println(c.getTime());
c.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(c.getTime());
}
}
実行
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
$
$ javac Test.java
$ java Test
Thu Oct 04 03:29:27 JST 1582
Fri Oct 15 03:29:27 JST 1582
---------------
Thu Oct 04 00:00:00 JST 1582
Fri Oct 15 00:00:00 JST 1582
■PHP
Javaみたいなことはやってない。
ソースコード
format('Y-m-d')."\n";
echo $date->modify('+1 days')->format('Y-m-d')."\n";
実行
$ php -v
PHP 7.4.0 (cli) (built: Mar 14 2020 18:05:20) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
$
$ php Test.php
1582-10-04
1582-10-05
■Python
Javaみたいなことはやってない。
ソースコード
import datetime
date = datetime.date(1582, 10, 4)
print(date)
print(date + datetime.timedelta(days=1))
実行
$ python3 --version
Python 3.7.5
$
$ python3 Test.py
1582-10-04
1582-10-05
■Go
Javaみたいなことはやってない。
ソースコード
package main
import(
"fmt"
"time"
)
func main() {
t := time.Date(1582, 10, 4, 0, 0, 0, 0, time.Local)
fmt.Println(t)
t = t.AddDate(0, 0, 1)
fmt.Println(t)
}
実行
$ go version
go version go1.13 darwin/amd64
$
$ go run Test.go
1582-10-04 00:00:00 +0900 JCST
1582-10-05 00:00:00 +0900 JCST
終わりに
しょうもないことに時間を使ってしまったと反省。
なお、Perlでも試そうとしたが、CPANモジュールをインストールできなくて諦めた。
(また今度、気が向いたときにやる)
*1:最新バージョンじゃない