猿问

如何将当前 GMT 时区的字符串转换为正常日期时间

我的字符串是


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);

但这不起作用


我怎样才能做到这一点?请帮我弄清楚逻辑。



慕少森
浏览 198回答 2
2回答

狐的传说

正如@Jon Skeet 提到的,使用java.time是个好主意。在您的偏移处使用Date.toInstant, 并转换为, :LocalDateTimeimport 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);    }}

慕田峪7331174

您需要做的第一件事是解析StringString 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然后它在当前时区
随时随地看视频慕课网APP

相关分类

Java
我要回答