在Java中想获取当天的日期,于是搜到这样的代码
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
很好奇点进去看getInstance()是干什么的,无意中发现还有带TimeZone参数的重载方法,于是乎试一下
TimeZone timeZone = TimeZone.getTimeZone("America/Mexico_City");
Calendar calendar = Calendar.getInstance(timeZone);
System.out.println(calendar.getTime());
然后你会发现,打印的时间根本没变化,标准的北京时间,而不是所设置的America,咋回事啊?
其实无论设置怎样的时区,calendar拿到的时间(用毫秒表示的那个long类型数字)其实都是一样的,只不过在将这个数字转换成小时、分钟的时候,会用到默认时区去进行转换,而上述代码并没有修改默认的时区,正确代码如下:
TimeZone timeZone = TimeZone.getTimeZone("America/Mexico_City");
TimeZone.setDefault(timeZone); //多了这一行
Calendar calendar = Calendar.getInstance(timeZone);
System.out.println(calendar.getTime());
好了,这样就能打印出America时区现在的时间了,另日期格式化的类 SimpleDateFormat 也记录一下
TimeZone timeZone = TimeZone.getTimeZone("America/Mexico_City");
TimeZone.setDefault(timeZone);
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhh:mm:ss",Locale.Locale.CHINA);
System.out.println(dateFormat.format(calendar.getTime()));