我正在java中进行简单的字符串到日期的转换,只有一件事我必须注意转换应该是GMT。 我能够在 GMT 中转换我的字符串。但是当我尝试将该日期转换为时间戳时,我得到了不同的值(似乎值基于我的本地时区)。
public static void timeFun(String str) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String dateInString = "2015-07-10T09:54:31.000-04:00";
Date date = formatter.parse(dateInString);
SimpleDateFormat sdfAmerica = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
TimeZone tz = TimeZone.getTimeZone("GMT");
sdfAmerica.setTimeZone(tz);
String convertedDate = sdfAmerica.format(date); // Convert to String
// first
Date dateInGMT = sdfAmerica.parse(convertedDate);
System.out.println(convertedDate); // Output = 2015-07-10T13:54:31.000Z (Right)
Timestamp timestamp = new java.sql.Timestamp(dateInGMT.getTime());
System.out.println(timestamp); // Output = 2015-07-10 19:24:31.0 (Wrong)
}
最佳答案
Timestamp.toString()在内部使用具有默认系统时区的日历实例。正如您在源代码 java.util.Date.normalize() 中看到的那样发挥魔力。 所以,是的......最后的系统输出基于您本地的时区。
关于Java日期时间戳转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38570560/