从解析的日期(时区问题)获取正确的长值

我试图从一个字符串解析日期并获得长期价值。 稍后的值将被发送到SQL查询。

这是我的代码:

String dayDate = "28-02-2013";            
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date day = new Date();
try {
    day = sdf.parse(dayDate);
} catch (ParseException pe) {
    pe.printStackTrace();
}
System.out.println("day : "+day.toString()+ "  long : " + day.getTime());

它给出了以下输出:

day : Thu Feb 28 00:00:00 EET 2013  long : 1362002400000

这是正确的,但不是我想要的,因为长期价值的结果在周三,2013年2月27日22:00:00 GMT(http://www.epochconverter.com/)(我在GMT + 2时区)。 我需要发送来纠正长期价值sql。

无论如何要解决这个问题,而不使用外部库?


SimpleDateFormat是语言环境感知的,这意味着它解析的日期在你的时区。 2月28日格林威治标准时间+2实际上是格林尼治标准时间2月27日格林威治标准时间,格林威治标准时间1362002400000。我会加上这个解析权限(不会打扰使用日历):

sdf.setTimeZone(TimeZone.getTimeZone("GMT"))

同样,当你打印这个日期时,它使用SimpleDateFormat,这就是为什么你可以在输出中看到EET。

把它传递给数据库是一个不同的故事,但是一旦你明白了这一点。


使用DateFormat.setCalendar(Calendar cal)设置GMT作为其时区的日历,或者使用带有GMT TimeZone的DateFormat.setTimeZone(TimeZone zone) 。 这将确保生成的日期将是格林尼治标准时间00:00:00,而不是EET。


如果你为你的字符串添加一个时区说明符,你可以强制java使用GMT进行转换:

String dayDate = "28-02-2013";            
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy z"); // z is a timezone specifier
Date day = new Date();
try {
    day = sdf.parse(dayDate + " GMT"); // Use GMT timezone.
} catch (ParseException pe) {
    pe.printStackTrace();
}
System.out.println("day : "+day.toString()+ "  long : " + day.getTime());
链接地址: http://www.djcxy.com/p/3069.html

上一篇: Get correct long value from parsed Date (Timezone issue)

下一篇: Java subtract two dates in this format