Как изменить +0800 на +0000 в Java? - PullRequest
0 голосов
/ 24 декабря 2018

Как изменить 2018-12-24 12:00:00 +0800 на 2018-12-23 16:00:00 +0000 в Java?

private String currentDateandTime = new Date();

final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
final DateFormat fullFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss XX", Locale.CHINA);
//dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
//fullFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));

Date dateTest = dateFormat.parse(currentDateandTime);
currentDateandTime = fullFormat.format(dateTest);

currentDateanTime Результат

2018-12-24 12:00:00 +0800

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Ну, ваш код начинается с проблемы.

private String currentDateandTime = new Date();

Предполагается, что Date() импортировано отсюда java.util.Date

В этой строке должна отображаться ошибка компилятора

В любом случае я предполагаю, что вы хотите преобразовать свой LocalTimezone DateTime в GMT Date Time

Date currentDate = new Date();
System.out.println(currentDate);

final DateFormat gmtFormatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
gmtFormatter.setTimeZone(TimeZone.getTimeZone("GMT"));
String convertedDate = gmtFormatter.format(currentDate);
System.out.println(convertedDate);

OUTPUT:
Mon Dec 24 09:52:14 IST 2018
2018-12-24 04:22:14
0 голосов
/ 24 декабря 2018

Если вы хотите получить один и тот же экземпляр только в разных часовых поясах, вы можете сделать это следующим образом:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss Z");
OffsetDateTime offsetDateTime = OffsetDateTime.parse("2018-12-24 12:00:00 +0800", formatter);
ZonedDateTime dateTimeInDesiredZoned = offsetDateTime.atZoneSameInstant(ZoneId.of("UTC"));
// 2018-12-24 04:00:00 +0000
System.out.println(formatter.format(dateTimeInDesiredZoned)); 

Однако 2018-12-24 12:00:00 +0800 и 2018-12-23 16:00:00 +0000 - это не одно и то же мгновение.Между ними интервал 12 часов, вам нужно минус эти 12 часов.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss Z");
OffsetDateTime offsetDateTime = OffsetDateTime.parse("2018-12-24 12:00:00 +0800", formatter);
offsetDateTime = offsetDateTime.minusHours(12);
ZonedDateTime dateTimeInDesiredZoned = offsetDateTime.atZoneSameInstant(ZoneId.of("UTC"));
// 2018-12-23 16:00:00 +0000
System.out.println(formatter.format(dateTimeInDesiredZoned)); 
0 голосов
/ 24 декабря 2018

необходимо установить часовой пояс GMT (+0000) для fullFormat, чтобы преобразовать часовой пояс по умолчанию в часовой пояс GMT:

Date currentDateandTime = new Date();

final DateFormat fullFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss XX", Locale.CHINA);
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
fullFormat.setTimeZone(gmtTime);
String currentDateandTimeInGMTFullFormat = fullFormat.format(currentDateandTime);
...