Как преобразовать строку с текущим часовым поясом GMT в обычное время даты - PullRequest
0 голосов
/ 04 марта 2019

У меня есть строка

Mon Mar 04 12:19:50 GMT+05:30 2019

, и я хочу, чтобы она была преобразована в

2019-03-04T12:19:50

Я пытался сделать:

 SimpleDateFormat sdf3 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);

 Date d1 = null;
 try{
     d1 = sdf3.parse(String.valueOf(currentTime));    
 }catch (Exception e){ e.printStackTrace(); }

 System.out.println("check..." + d1);

Но это нене работает

Как я могу это сделать?Пожалуйста, помогите мне разобраться в логике.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Как отметил @Jon Skeet, использование java.time - хорошая идея.Используйте Date.toInstant и конвертируйте в LocalDateTime по вашему смещению:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.Locale;

public class SO201904030814 {

    public SO201904030814() {
    }

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf3 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);

        Date d1 = sdf3.parse(String.valueOf("Mon Mar 04 12:19:50 GMT+05:30 2019"));

        LocalDateTime dateTime = LocalDateTime.ofInstant(d1.toInstant(), ZoneOffset.of("+05:30"));

        System.out.println("check..." + d1 + " vs " + dateTime);

    }

}

HTH!

0 голосов
/ 04 марта 2019

Первое, что вам нужно сделать, это проанализировать String

String value = "Mon Mar 04 12:19:50 GMT+05:30 2019";
DateTimeFormatter formatIn = DateTimeFormatter.ofPattern("EE MMM dd HH:mm:ss O yyyy", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse(value, formatIn);

Теперь вы можете отформатировать значение в соответствии с вашими потребностями

DateTimeFormatter formatOut = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
String formatted = zdt.format(formatOut);
// 2019-03-04T12:19:50

или

String formatted = zdt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
// 2019-03-04T12:19:50 

но если бы я собирался это сделать, я бы, вероятно, сделал что-то вроде ...

ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime ldt = zdt.withZoneSameInstant(zoneId).toLocalDateTime();
String formatted = ldt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
// 2019-03-04T17:49:50

Тогда это в текущем часовом поясе

Я рекомендую вам взглянутьв Дата и время Классы

...