博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于java Date和时区的问题 (转)
阅读量:5121 次
发布时间:2019-06-13

本文共 1964 字,大约阅读时间需要 6 分钟。

java2平台为我们提供了丰富的日期时间API。如java.util.Date;java.util.calendar;java.text.DateFormat等。那么它们之间有什么关系呢?

首先,java.util.Date代表一个时间点,其值为距公元1970年1月1日 00:00:00的毫秒数。所以它是没有时区和Locale概念的。java通过如下形式取得当前时间点:

Date now = new Date();  //这个时间点与本地系统的时区无关

而正因为其与时区的无关性,才使得我们的存储数据(时间)是一致的(时区一致性)。一般的我们将now存储于数据库中,当我们需要展现数据时,将now格式化成想要的格式,如:2009-11-19 14:12:23。而这个功能一般交由java.text.DateFormat来实现。例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String snow = sdf.format(now);  // 2009-11-19 14:12:23

我们发现snow是带时间(14:12:23)的字符串,我们不禁要问,该时间(14:12:23)是哪个时区的时间?默认情况下,SimpleDateFormat 取得本地系统的时区(我的时区为GMT+8北京),然后按照pattern("yyyy-MM-dd HH:mm:ss")格式化now,此时输出的就是GMT+8区的时间了。如果想支持国际化时间,则先指定时区,然后再格式化date数据。例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));

String snow = sdf.format(now);  // 2009-11-19 14:12:23

另外,你可以通过如下代码修改本地时区信息:

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

 

java.util.Calendar类也代表时间点,但它为Date的facade工具类,提供了很多对时间点到年、月、日、时、分、秒、星期等的转换(计算)的方便方法。

Calendar calendar = Calendar.getInstance(timezone); 

Date d = calendar.getTime();

Calendar 的计算也是基于时区的,例如:同一个date在不同时区下的小时数是不一样的。但是calendar.getTime();返回的date是没有时区的,因为它是Date类型的。例如:

 public static void main(String[] args) throws InterruptedException {

  Calendar calendar1 = Calendar
    .getInstance(TimeZone.getTimeZone("GMT+8"));
  Calendar calendar2 = Calendar
    .getInstance(TimeZone.getTimeZone("GMT+1"));

  System.out.println("Millis = " + calendar1.getTimeInMillis());

  System.out.println("Millis = " + calendar2.getTimeInMillis());

  System.out.println("hour = " + calendar1.get(Calendar.HOUR));

  System.out.println("hour = " + calendar2.get(Calendar.HOUR));

  System.out.println("date = " + calendar1.getTime());

  System.out.println("date = " + calendar2.getTime());
 }
输出:

Millis = 1258614681203

Millis = 1258614681203
hour = 3
hour = 8
date = Thu Nov 19 15:11:21 CST 2009
date = Thu Nov 19 15:11:21 CST 2009

转载于:https://www.cnblogs.com/zhengchunhao/p/5775777.html

你可能感兴趣的文章
(四)资源文件分类
查看>>
JS判断年份是否为闰年
查看>>
鸡啄米vc++2010系列41(MFC常用类:CString类)
查看>>
张量(tensor)的广播
查看>>
visual studio错误解决 [error LNK1104: 无法打开文件“gdi32.lib”]
查看>>
windows线程用户模式-关键段
查看>>
xslt 简单的语法
查看>>
UVA10878 Decode the tape
查看>>
Java Thread
查看>>
jquery新增元素on click无效
查看>>
个人每日总结10
查看>>
【转】Jmeter在命令行运行技巧
查看>>
行测(爆发篇)之数学运算怎能轻言放弃?!
查看>>
socket 编程入门教程(三)TCP原理:4、设计TCP socket的类(下)
查看>>
最简洁的IP判断正则表达式
查看>>
第2次作业:微博软件分析
查看>>
Python__slots__详解
查看>>
在 win 10 中使用sql 2012 附加低版本数据失败的解决办法。
查看>>
Algorithmic Graph Drawing in TikZ
查看>>
SQL2000数据库密码被替换,重置密码提示未能找到存储过程sp_password解决方案
查看>>