繁体   English   中英

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

[英]Get correct long value from parsed Date (Timezone issue)

我正在尝试从String解析日期并获取long值。 long值将稍后发送到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日晚上10点,长值1362002400000。我会添加这个以获得正确的解析(不会打扰使用日历):

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

同样,当您打印此日期时,它使用SimpleDateFormat,这就是您可以在输出中看到EET的原因。

将此传递给数据库是一个不同的故事,但一旦你做对了。

使用DateFormat.setCalendar(Calendar cal)设置以GMT作为时区的日历,或使用带有GMT TimeZone的DateFormat.setTimeZone(TimeZone zone) 这将确保结果日期在GMT而不是在EET中为00:00:00。

如果向字符串添加时区说明符,则可以强制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());

您将在日期和时间的文本和内部( Date )表示之间进行转换,而无需明确说明时区。 这从来都不顺利

Calendar calendar = Calendar.getInstance();
    calendar.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
    Date date = calendar.getTime();

使用你的时区字符串:

时区

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM