我正在尝试从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的长值。
有没有使用外部库来解决这个问题?
答案 0 :(得分:5)
SimpleDateFormat是区域设置感知的,这意味着它解析的日期在您的时区中。格林尼治标准时间2月28日午夜2点实际上是格林尼治标准时间2月27日晚上10点,长值1362002400000.我会添加这个以获得正确的解析(不会打扰使用日历):
sdf.setTimeZone(TimeZone.getTimeZone("GMT"))
同样,当您打印此日期时,它使用SimpleDateFormat,这就是您可以在输出中看到EET的原因。
将此传递给数据库是一个不同的故事,但一旦你做对了。
答案 1 :(得分:1)
使用DateFormat.setCalendar(Calendar cal)
设置以GMT作为时区的日历,或使用DateFormat.setTimeZone(TimeZone zone)
和GMT TimeZone。这将确保结果日期在GMT而不是在EET中为00:00:00。
答案 2 :(得分:1)
如果您在字符串中添加时区说明符,则可以强制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());
答案 3 :(得分:1)
您在文本和内部(Date
)日期和时间表示之间进行转换,而没有明确说明时区。 That never goes well
答案 4 :(得分:0)
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
Date date = calendar.getTime();
使用您的时区字符串: