Как преобразовать тип данных SQL даты и времени по Гринвичу в метку времени JAVA EST на JDK 1.7 - PullRequest
2 голосов
/ 30 сентября 2019

тип данных datetime в GMT. Сервер SQL: имя столбца = значение PostedDateTime = 2019-09-30 17: 46: 04.600

Я пытаюсь использовать код JAVA для преобразования этого значения даты и времени в метку времени EST. вывод должен быть: 2019-09-30 13: 46: 04

Любые идеи, как преобразовать это, пожалуйста, включите пакет, который должен быть импортирован?

Пока у меня есть это:

SimpleDateFormat dr = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
SimpleDateFormat dr1 = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
String dateString = obj.getStringProperty("S_DISCUSSION_POSTEDDATETIME");
Date date = dr.parse(dateString);           
strRetBuffer.append(obj.getStringProperty("S_DISCUSSION_AUTHOR") + ": " + dr1.format(date) + ": " + obj.getStringProperty("S_DISCUSSION_TOPICNAME")+": " +obj.getStringProperty("S_DISCUSSION_BODY") + "\n\r" );

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

Сначала проанализируйте входную строку в LocalDateTime, используя DateTimeFormatter

String date = "2019-09-30 17:46:04.600";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

LocalDateTime local = LocalDateTime.parse(date, formatter);

, а затем преобразуйте LocalDateTime в ZonedDateTime с часовым поясом GMT, равным UTC+0

ZonedDateTime zone = ZonedDateTime.of(local, ZoneId.of("UTC"));

Наконец преобразуйте ZonedDateTime в LocalDateTime с US/Eastern и форматом вывода

String output = zone.withZoneSameInstant(ZoneId.of("US/Eastern")).toLocalDateTime().format(outputFormat);
0 голосов
/ 02 октября 2019
        String x = "2019-09-30 17:46:04.600";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date = formatter.parse(x);
        System.out.println(date);
        System.out.println(formatter.format(date));
        outputFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
        System.out.println(outputFormat.format(date));
...