今更Dateクラス!
Dateクラスにはローカルのタイムゾーンが適用される!!!
import java.util.Date; public class HelloWorld{ public static void main(String []args){ //シリアル値から日付を取り出して再度Dateオブジェクト生成 Date now = new Date(2020-1900, 1-1, 1); Date copy = new Date(now.getTime()/(1000*60*60*24L)*1000*60*60*24L); System.out.println(java.util.TimeZone.getDefault().getID()); System.out.println(now + "\n" + copy); } }
Etc/UTC Wed Jan 01 00:00:00 UTC 2020 Wed Jan 01 00:00:00 UTC 2020
日本で実行
Asia/Tokyo Wed Jan 01 00:00:00 JST 2020 Tue Dec 31 09:00:00 JST 2019 <--日付変わってる!!!!!!
改良案
import java.util.Date; public class HelloWorld{ public static void main(String []args){ //シリアル値から日付を取り出して再度Dateオブジェクト生成 //UTCで初期化すればgetTime()による演算は期待通り //Date now = new Date(2020-1900, 1-1, 1); Date now = new Date(Date.UTC(2020-1900, 1-1, 1, 0, 0, 0)); Date copy = new Date(now.getTime()/(1000*60*60*24L)*1000*60*60*24L); System.out.println(java.util.TimeZone.getDefault().getID()); System.out.println(now + "\n" + copy); } }
日本で実行
Asia/Tokyo Wed Jan 01 09:00:00 JST 2020 Wed Jan 01 09:00:00 JST 2020
日付トリビア