Я делаю простой Преобразование строк на дату в java, Только одно, что я должен позаботиться о преобразовании, должно быть в GMT. Я могу преобразовать свою строку в GMT. Но когда я попытался преобразовать эту дату во временную метку, у меня получилось другое значение (значение value основано на моем локальном часовом поясе).Ошибка преобразования даты по дате Java
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 может делать некоторые преобразования на основе настроек вашего компьютера, но не влияет на внутреннее состояние объектов. Если вы используете временную метку, вы, вероятно, хотите взаимодействовать с БД, и результат должен быть таким, каким вы ожидали бы (13: 54GMT или какой-то эквивалентный момент времени), если в столбце базы данных есть часовой пояс. – assylias