Java中夏令时带来的Date不一致问题 (转)
http://www.cnblogs.com/snake-hand/archive/2013/06/10/3131157.html
最近同事W发现使用Java Date创建日期,在不同的机器上执行,得到的部分天小时数不一致。一开始怀疑机器的时间同步有问题,便拿到自己的机器上运行,异常复现,开始排查。
package com.bc.time; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar; public class TimeZoneTest {
public static void main(String[] args) {
TimeZoneTest test = new TimeZoneTest(); final long ONE_DAY_MILLIS = 1000 * 3600 * 24L;
Date date0 = new Date(ONE_DAY_MILLIS * 0);
System.out.println("start date=" + test.format(date0) + "millis=" + date0.getTime());
System.out.println("********************");
int count = 0; for (int i = 0; i < 300000; ++i) {
long millis = ONE_DAY_MILLIS * i;
Date date = new Date(millis); if (date.getHours() != 8 || date.getMinutes() != 0 || date.getSeconds() != 0) {
System.out.println("i = " + i + " | " + test.format(date) + "| " + date + ", millis=" + millis); GregorianCalendar newDate = new GregorianCalendar();
newDate.setTimeInMillis(millis);
System.out.println("i = " + i + " | newDate " + newDate.getTimeInMillis() + "| " + newDate);
count++;
}
}
System.out.println("count=" + count);
} public String format(Date date){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = format.format(date);
return dateStr;
}
}
package com.bc.time; import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.text.SimpleDateFormat; public class WhatTime { /**
* Dates those have not EXACTLY 24 hours ?
**/
public static void testDayTime(TimeZone timeZone){ SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Time Zone is " + timeZone.getDisplayName() + " " + timeZone.getID()); Calendar start = Calendar.getInstance(timeZone);
start.setTime(new Date(0));//UTC 1970-01-01 System.out.println("start=" + fmt.format(start.getTime())); long end = Calendar.getInstance(timeZone).getTimeInMillis();//current time boolean find = false;
for(long i = start.getTimeInMillis(); i < end; i= start.getTimeInMillis() ){
start.add(Calendar.DATE, 1); //add one day if((start.getTimeInMillis() - i)%(24*3600*1000L) != 0){
find = true;
System.out.println("from " + fmt.format(new Date(i)) +
"to " + fmt.format(start.getTime()) +
" has " + (start.getTimeInMillis() - i) + "ms" +
"[" + (start.getTimeInMillis() - i)/(3600*1000L) + "hours]");
}
}
if(!find){
System.out.println("Every day is ok.");
}
} public static void main(String argv[] ) throws Exception{ TimeZone timeZone = TimeZone.getDefault();
WhatTime.testDayTime(timeZone); System.out.println("----------------------------------------------------------------"); timeZone = TimeZone.getTimeZone("GMT");
WhatTime.testDayTime(timeZone);
} }
Java中夏令时带来的Date不一致问题 (转)的更多相关文章
- java 中的SimpleDateFormat、Date函数以及字符串和Date类型互转
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析(文本 -> 日期)和规范化. SimpleDateFor ...
- java中XMLGregorianCalendar类型和Date类型之间的相互转换
import java.text.SimpleDateFormat;import java.util.Date;import java.util.GregorianCalendar;import ja ...
- java中String类型与Date日期类型的互相转换
//String格式的数据转化成Date格式,Date格式转化成String格式 SimpleDateFormat formatter= new SimpleDateFormat("yyyy ...
- Java中String型与Date型数据的互相转换
/** * Date类型转为指定格式的String类型 * * @param source * @param pattern * @return */ public static String Dat ...
- Java中的时间日期Date和Calendar
日期时间类 Date: Date类的构造方法: 可以发现Date类的toString方法被重写了. Date类的方法: SimpleDateFormat 它提供了解决Date输出问题的解决方案--格式 ...
- Java中Date类型与String 类型之间的互相转换
Java中String类型和Date类型之间的转换 我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需 ...
- java中hashCode()与equals()详解
首先之所以会将hashCode()与equals()放到一起是因为它们具备一个相同的作用:用来比较某个东西.其中hashCode()主要是用在hash表中提高 查找效率,而equals()则相对而言使 ...
- Java中关于时间日期格式保存到mysql的问题
首先在设置数据库的时间日期字段的时候要先确定好采用何种类型,DATETIME. TIMESTAMP.DATE.TIME.YEAR. 其中datetime.time用的比较多,对应java中生成的poj ...
- 第七节:详细讲解Java中的日期,java.util.date
前言 大家好,给大家带来详细讲解Java中的日期,java.util.date的概述,希望你们喜欢 类Date Java.lang.Object->java.util.Date public c ...
随机推荐
- Codeforces Beta Round #14 (Div. 2) A. Letter 水题
A. Letter 题目连接: http://www.codeforces.com/contest/14/problem/A Description A boy Bob likes to draw. ...
- WebConfig 加密解密的原理是什么?
WebConfig 加密解密的原理是什么? 使用命令 加密数据连接串 加密:aspnet_regiis -pef connectionStrings d:/...(webconfig所在路径,不能含中 ...
- hdu4467 Graph
Graph Problem Description P. T. Tigris is a student currently studying graph theory. One day, when h ...
- Creating popup windows in XBAP applications
A colleague at DevelopMentor recently asked me about creating popup windows in XAML browser applicat ...
- UIWindow 介绍:概述、作用、主要属性及方法
概述: UIWindow 类是 UIView 的子类,用于管理.协调应用中显示的窗口,其两个最重要的职能就是 容器,给 view 提供展示的区域: 将事件(例如:点击事件.拖拉事件等)分发给 view ...
- AES加解密算法在Android中的应用及Android4.2以上版本调用问题
from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...
- adb install -r 中出现INSTALL_FAILED_UNKNOWN_SOURCES,怎样解决?
adb install -r 中出现INSTALL_FAILED_UNKNOWN_SOURCES,怎样解决? D:\android_code\0708\tools>adb install -r ...
- WordPress基础:wp_title
使用标题格式:首页(网站标题 - 网站副标题),其他页面(页面标题 | 网站标题) wp_title(分隔符,是否直接显示,分隔符显示在哪里) wp_title用在首页是没效果的,需要自己格式化一下 ...
- 漏洞风险评估:CVSS介绍及计算
CVSS 通用弱点评价体系(CVSS)是由NIAC开发.FIRST维护的一个开放并且能够被产品厂商免费采用的标准.利用该标准,可以对弱点进行评分,进而帮助我们判断修复不同弱点的优先等级. CVSS : ...
- linux syslog详解 转
分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置 一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广泛应用于系统日志.syslog ...