Date和TimeZone的关系
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来实现。例如:
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数据。例如:
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String snow = sdf.format(now); // 2011-11-19 14:12:23
另外,你可以通过如下代码修改本地时区信息:
java.util.Calendar类也代表时间点,但它为Date的facade工具类,提供了很多对时间点到年、月、日、时、分、秒、星期等的转换(计算)的方便方法。
Date d = calendar.getTime();
Calendar 的计算也是基于时区的,例如:同一个date在不同时区下的小时数是不一样的。但是calendar.getTime();返回的date是没有时区的,因为它是Date类型的。例如:
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
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的关系相关推荐
- java calendar 设置时区_详解Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
一.概述 1.问题描述 使用Java处理时间时,我们可能会经常发现时间不对,比如相差8个小时等等,其真实原因便是TimeZone.只有正确合理的运用TimeZone,才能保证系统时间无论何时都是准确的 ...
- 探索 Java 中的 Date, Calendar, TimeZone 和Timestamp
探索 Java 中的 Date, Calendar, TimeZone 和Timestamp java 2010-12-31 08:56:49 阅读8 评论0 字号:大中小 订阅 对象 宋晟 (sh ...
- Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
一.概述 1.问题描述 使用Java处理时间时,我们可能会经常发现时间不对,比如相差8个小时等等,其真实原因便是TimeZone.只有正确合理的运用TimeZone,才能保证系统时间无论何时都是准确的 ...
- 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 ...
- julianDate与Date之间的转换关系
正如我们知道的js创建的Date对象是北京时间,但是与朱利安的日期是不同的,cesium中显示的时间与你设置的Date日期的时间是不同的两者差8个小时.(朱利安时间=UTC=GMT),北京时间=UTC ...
- elasticsearch date及timezone总结
首先elasticsearch 所有日期保存都是utc,不能修改. elasticsearch 会识别多种日期,默认支持的日期格式请参看https://www.elastic.co/guide/en/ ...
- Date, TimeZone, MongoDB, java中date的时区问题
打印new Date(),Fri Aug 12 13:37:51 CST 2016. 显示Asia/Shanghai的时区,但是date toString 的时区简写却是CST.更坑爹的是,Googl ...
- 关于EBS中ERP 工作台释放工单时Date的关系和验证
在EBS中有各个不同的Suggested date: Date_type Desc Forecast date Forecast要求齐料时间 Need by date 买家要求到货时间,等于Sugg ...
- java不同时区时间转换,Java不同时区(timezone)之间时间转换
最近出现一个问题是这样的 我们的系统在国外打印的日志时间由于时差关系和国内不一致 看起来不方便 希望国外的日志和国内保持一致 即 需要对不同时区的时间做转换调整 统一为国内时间. 一.关于时区的一些概 ...
最新文章
- OpenCL通用异构开放环境
- Android Studio使用Lint进行代码检查
- MongoDB 3.4 复制集全量同步改进
- 1.Java(初级)编程教程(油管 thenewboston)学习笔记get user input
- Ubuntu16.04安装JDK1.8
- 位换记号、排列测试与状态图:杂耍中的数学
- php读写xml文件,另辟蹊径 搞定PHP读取XML大文件 数据导入
- Android 2.3.5/4.0.3/4.1PowerManager简单总结和心得体会
- ADO BUG之'无法为更新定位行....' 解决之道
- LINUX剪贴板调用接口获取数据
- matlab有限差分法求解温度场,动静压轴承油膜温升MATLABFLuENT有限差分法硕士论文...
- 物联网之有线通信技术之短距离的现场总线
- 重新认识差评与客户满意度
- 接近618,浅谈“猫爪杯”,“优衣库”背后的饥饿营销套路
- C# 将OFD转为PDF
- Java基础 基础数据类型
- pythonreader下载_使用Python的pandas-datareader包下载雅虎财经股价数据
- 操作系统概论知识总结
- 练手卦,奖金何时发?
- osg glsl添加半透明