TimeZone以及时区有关的操作Date/Calendar/SimpleDateFormat
来源:互联网 发布:java物联网待遇 编辑:程序博客网 时间:2024/06/04 13:12
TimeZone
1. System.getProperty("user.timezone") System.setProperty("user.timezone","GMT+8")
2. TimeZone.getDefault().getID() TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"))
Date date = new Date();System.out.println("date.toString():"+date.toString());System.out.println("date.getTime()"+date.getTime());Calendar cal = Calendar.getInstance();System.out.println("Calendar.getInstance().getTime():"+cal.getTime());System.out.println("Calendar.getInstance().getTimeInMillis():"+cal.getTimeInMillis());System.out.println("Calendar.getInstance().getTimeZone():"+cal.getTimeZone());System.out.println("system user.timezone:" + System.getProperty("user.timezone"));System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID());System.out.println("--------------------------------------");System.out.println("After setTimeZone0:");TimeZone.setDefault(TimeZone.getTimeZone("GMT+2"));date = new Date();System.out.println("date.toString():"+date);System.out.println("date.getTime()"+date.getTime());cal = Calendar.getInstance();System.out.println("Calendar.getInstance().getTime():"+cal.getTime());System.out.println("Calendar.getInstance().getTimeInMillis():"+cal.getTimeInMillis());System.out.println("Calendar.getInstance().getTimeZone():"+cal.getTimeZone());System.out.println("system user.timezone:" + System.getProperty("user.timezone"));System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID());System.out.println("--------------------------------------");TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));System.setProperty("user.timezone", "GMT+2");date = new Date();System.out.println("date.toString():"+date);System.out.println("date.getTime()"+date.getTime());cal = Calendar.getInstance();System.out.println("Calendar.getInstance().getTime():"+cal.getTime());System.out.println("Calendar.getInstance().getTimeInMillis():"+cal.getTimeInMillis());System.out.println("Calendar.getInstance().getTimeZone():"+cal.getTimeZone());System.out.println("system user.timezone:" + System.getProperty("user.timezone"));System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID());System.out.println("--------------------------------------");
结果:
date.toString():Wed Nov 23 14:41:32 CST 2016date.getTime()1479883292507Calendar.getInstance().getTime():Wed Nov 23 14:41:32 CST 2016Calendar.getInstance().getTimeInMillis():1479883292535Calendar.getInstance().getTimeZone():sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]system user.timezone:Asia/Shanghaisystem user.country:CN默认时区:Asia/Shanghai--------------------------------------After setTimeZone0:date.toString():Wed Nov 23 08:41:32 GMT+02:00 2016date.getTime()1479883292538Calendar.getInstance().getTime():Wed Nov 23 08:41:32 GMT+02:00 2016Calendar.getInstance().getTimeInMillis():1479883292538Calendar.getInstance().getTimeZone():sun.util.calendar.ZoneInfo[id="GMT+02:00",offset=7200000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]system user.timezone:Asia/Shanghaisystem user.country:CN默认时区:GMT+02:00--------------------------------------date.toString():Wed Nov 23 14:41:32 CST 2016date.getTime()1479883292539Calendar.getInstance().getTime():Wed Nov 23 14:41:32 CST 2016Calendar.getInstance().getTimeInMillis():1479883292539Calendar.getInstance().getTimeZone():sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]system user.timezone:GMT+2system user.country:CN默认时区:Asia/Shanghai--------------------------------------
由此可见:
1)Date.toString()依赖于TimeZone中defaultTimezone;Calendar同样;TimeZone同样;
2)System.property 中 “user.timezone”与TimeZone中defaultTimezone的关系:
TimeZone取默认值,先取该对象已经设定好的默认值,如果没有则取system.property中的"user.timezone",再没有的话才根据“java.home”和“user.country”来获取。。。。(从TimeZone.getDefault()源码可知);
System.property中user.timezone会在TimeZone执行由“java.home”和“user.country”获取timezone的方法后获得初值;
link:http://2005713.blog.51cto.com/1995713/698032
3)System.property中 “user.timezone"与 "user.country"无关;
4)Date.getTime() 和 Calendar.getTimeInMillis()相差无几,此毫秒数都是相对于1970.1.1 00:00:00 GMT.
SimpleDateFormat
public class CalendarTest0 { public static void main(String[] args) {String dateStr = null;SimpleDateFormat format = null;Date date = null; System.out.println("system user.timezone:" + System.getProperty("user.timezone")); System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID());format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");date = new Date();dateStr = format.format(date);System.out.println(dateStr);System.out.println("Set system.user.timezone=GMT+2:");System.setProperty("user.timezone", "GMT+2"); Calendar cal = Calendar.getInstance();format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");dateStr = format.format(cal.getTime());System.out.println(dateStr);System.out.println("system user.timezone:" + System.getProperty("user.timezone"));System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID());System.out.println("------------------------------");System.out.println("Set system.user.timezone to GMT+2:");format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");date = new Date(); dateStr = format.format(date); System.out.println(dateStr);System.out.println("system user.timezone:" + System.getProperty("user.timezone"));System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID()); System.out.println("------------------------------"); System.out.println("Set format.settimezone to GMT+4:"); format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); date = new Date(); format.setTimeZone(TimeZone.getTimeZone("GMT+4")); dateStr = format.format(date); System.out.println(dateStr);System.out.println("system user.timezone:" + System.getProperty("user.timezone"));System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID()); System.out.println("------------------------------"); System.out.println("Set format.settimezone to GMT+6 and TimeZone.setTimeZone to GMT+8 :"); format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); date = new Date(); format.setTimeZone(TimeZone.getTimeZone("GMT+6")); TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); dateStr = format.format(date); System.out.println(dateStr);System.out.println("system user.timezone:" + System.getProperty("user.timezone"));System.out.println("system user.country:" + System.getProperty("user.country"));System.out.println("默认时区:" + TimeZone.getDefault().getID()); System.out.println("------------------------------");}}Console:
system user.timezone:
system user.country:CN
默认时区:Asia/Shanghai
2016-11-24 18:34:43 +0800
Set system.user.timezone=GMT+2:
2016-11-24 18:34:43 +0800
system user.timezone:GMT+2
system user.country:CN
默认时区:Asia/Shanghai
------------------------------
Set system.user.timezone to GMT+2:
2016-11-24 18:34:43 +0800
system user.timezone:GMT+2
system user.country:CN
默认时区:Asia/Shanghai
------------------------------
Set format.settimezone to GMT+4:
2016-11-24 14:34:43 +0400
system user.timezone:GMT+2
system user.country:CN
默认时区:Asia/Shanghai
------------------------------
Set format.settimezone to GMT+6 and TimeZone.setTimeZone to GMT+8 :
2016-11-24 16:34:43 +0600
system user.timezone:GMT+2
system user.country:CN
默认时区:GMT+08:00
------------------------------
结论:
a.SimpleDateFormat使用的默认时区是TimeZone.getDefault()的时区而非System.getProperty("user.timezone")的时区;
b.SimpleDateFormat.setTimeZone()并不会改变TimeZone的值;
c.当既SimpleDateFormat.setTimeZone()又TimeZone.setDefault()时,SimpleDateFormat取SimpleDateFormat.setTimeZone()设定的值;
- TimeZone以及时区有关的操作Date/Calendar/SimpleDateFormat
- Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(5) SimpleDateFormat
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Date ,Calendar以及 SimpleDateFormat类的常用方法
- Date,Calendar,SimpleDateFormat的使用
- Date,SimpleDateFormat,Calendar的使用
- 日期操作类(Date、Calendar、DateFormat、SimpleDateFormat)
- java中Calendar,simpleDateFormat,Date 操作
- Date & Calendar & TimeZone
- Date, TimeZone, MongoDB, java中date的时区问题
- Calendar Date ,DateFormat, SimpleDateFormat的区别
- Date,SimpleDateFormat,Calendar 类的应用
- AsyncTask请求网络
- 那些有趣的人和事
- JAVA面试-基础加强与巩固:反射、注解、泛型等
- 关于eyelike-Master的理解
- 小距离监听ListView或者ScrollView上下滑动
- TimeZone以及时区有关的操作Date/Calendar/SimpleDateFormat
- 24 leetcode - Merge k Sorted Lists
- float左右,中间自适应,和一些tips
- unity 单个树木创建
- 标签
- 分布式架构的演进
- 使用谷歌官annotation包的时候出现错误
- 更换用户名登录共享文件夹
- range与xrange