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格式化成想要的格式,如:2011-11-19 14:12:23。而这个功能一般交由java.text.DateFormat来实现。例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String snow = sdf.format(now);  // 2011-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);  // 2011-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 = 1358614681203
Millis = 1358614681203
hour = 3
hour = 8
date = Thu Nov 19 15:11:21 CST 2011
date = Thu Nov 19 15:11:21 CST 2011

转载于:https://www.cnblogs.com/cyblog-eastcn/p/4876512.html

Date和TimeZone的关系相关推荐

  1. java calendar 设置时区_详解Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat

    一.概述 1.问题描述 使用Java处理时间时,我们可能会经常发现时间不对,比如相差8个小时等等,其真实原因便是TimeZone.只有正确合理的运用TimeZone,才能保证系统时间无论何时都是准确的 ...

  2. 探索 Java 中的 Date, Calendar, TimeZone 和Timestamp

    探索 Java 中的 Date, Calendar, TimeZone 和Timestamp java 2010-12-31 08:56:49 阅读8 评论0  字号:大中小 订阅 对象 宋晟 (sh ...

  3. Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat

    一.概述 1.问题描述 使用Java处理时间时,我们可能会经常发现时间不对,比如相差8个小时等等,其真实原因便是TimeZone.只有正确合理的运用TimeZone,才能保证系统时间无论何时都是准确的 ...

  4. java万年历uml_Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(2) 自己封装的Calendar接口...

    1 packagecom.via.mce.monthcalendar.utils;2 3 importjava.util.Calendar;4 importjava.util.Date;5 impor ...

  5. julianDate与Date之间的转换关系

    正如我们知道的js创建的Date对象是北京时间,但是与朱利安的日期是不同的,cesium中显示的时间与你设置的Date日期的时间是不同的两者差8个小时.(朱利安时间=UTC=GMT),北京时间=UTC ...

  6. elasticsearch date及timezone总结

    首先elasticsearch 所有日期保存都是utc,不能修改. elasticsearch 会识别多种日期,默认支持的日期格式请参看https://www.elastic.co/guide/en/ ...

  7. Date, TimeZone, MongoDB, java中date的时区问题

    打印new Date(),Fri Aug 12 13:37:51 CST 2016. 显示Asia/Shanghai的时区,但是date toString 的时区简写却是CST.更坑爹的是,Googl ...

  8. 关于EBS中ERP 工作台释放工单时Date的关系和验证

    在EBS中有各个不同的Suggested date: Date_type Desc Forecast date Forecast要求齐料时间 Need by date 买家要求到货时间,等于Sugg ...

  9. java不同时区时间转换,Java不同时区(timezone)之间时间转换

    最近出现一个问题是这样的 我们的系统在国外打印的日志时间由于时差关系和国内不一致 看起来不方便 希望国外的日志和国内保持一致 即 需要对不同时区的时间做转换调整 统一为国内时间. 一.关于时区的一些概 ...

最新文章

  1. OpenCL通用异构开放环境
  2. Android Studio使用Lint进行代码检查
  3. MongoDB 3.4 复制集全量同步改进
  4. 1.Java(初级)编程教程(油管 thenewboston)学习笔记get user input
  5. Ubuntu16.04安装JDK1.8
  6. 位换记号、排列测试与状态图:杂耍中的数学
  7. php读写xml文件,另辟蹊径 搞定PHP读取XML大文件 数据导入
  8. Android 2.3.5/4.0.3/4.1PowerManager简单总结和心得体会
  9. ADO BUG之'无法为更新定位行....' 解决之道
  10. LINUX剪贴板调用接口获取数据
  11. matlab有限差分法求解温度场,动静压轴承油膜温升MATLABFLuENT有限差分法硕士论文...
  12. 物联网之有线通信技术之短距离的现场总线
  13. 重新认识差评与客户满意度
  14. 接近618,浅谈“猫爪杯”,“优衣库”背后的饥饿营销套路
  15. C# 将OFD转为PDF
  16. Java基础 基础数据类型
  17. pythonreader下载_使用Python的pandas-datareader包下载雅虎财经股价数据
  18. 操作系统概论知识总结
  19. 练手卦,奖金何时发?
  20. osg glsl添加半透明

热门文章

  1. flume采集最简demo
  2. oracle 5632,Oracle系统默认临时表空间以及redo日志文件问题处理
  3. 关于QMap的几点总结思考
  4. 图˙谱˙马尔可夫过程˙聚类结构(转自MIT的中国留学生博客)
  5. 排队问题解题思路_三大策略、5个技巧,完美解决超市收银排队难题
  6. 51nod1236 序列求和 V3
  7. Apex 的异常处理
  8. laravel controller
  9. 【R】Rstudio set up
  10. OpenGL OBJ模型加载.