将字符串转换为日期(不同格式)



我需要一些帮助从字符串转换到日期,因为你可以看到有几个关于它的主题,但是我需要转换的与互联网上可用的内容不同,所以我需要有人的帮助。

我通常收到的日期格式如下:Mon Mar 01 15:19:58 +0000 2021。我想做转换,因为它是:03/01/2021 15:19:58。我试着这样做,但它没有工作:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String data = "Mon Mar 01 15:19:58 +0000 2021";
try {
Date date = formatter.parse(data);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);

有谁知道我怎么能解决这个问题吗?

您可能需要这个格式字符串来进行解析:

"EEE MMM dd HH:mm:ss Z yyyy"

:

SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");

一旦你在date中有了值,你可以(重新)格式化它,无论你想要什么。

我也有同样的需求,我做了这样的事情:

public class FreeFormatDateConveter {
private static class DatePatternTuple {
private final Pattern pattern;
private final String datePattern;
DatePatternTuple(final String pattern, final String datePattern) {
this.pattern = Pattern.compile(pattern);
this.datePattern = datePattern;
}
boolean matches(String candidate) {
return pattern.matcher(candidate).matches();
}
SimpleDateFormat dateFormat() {
return new SimpleDateFormat(datePattern);
}
}
private static final DatePatternTuple[] DATE_PATTERN_TUPLES = {
new DatePatternTuple("\d{4}/\d{1,2}/\d{1,2} \d{2}:\d{2}:\d{2}", "yyyy/MM/dd HH:mm:ss"),
new DatePatternTuple("\d{1,2}/\d{1,2}/\d{4} \d{2}:\d{2}:\d{2}", "dd/MM/yyyy HH:mm:ss"),
new DatePatternTuple("\w{3,4} \d{2} \d{2}:\d{2}:\d{2} \d{4}", " MMM dd HH:mm:ss yyyy")
};

public static Date freeFormatDateParser(String dateStr) {
return Stream.of(DATE_PATTERN_TUPLES)
.filter(t -> t.matches(dateStr))
.map(DatePatternTuple::dateFormat)
.filter(t -> matches(t, dateStr))
.map(t -> parse(t, dateStr))
.findFirst()
.orElse(null);
}
private static boolean matches(SimpleDateFormat dateFormat, String dateStr) {
try {
dateFormat.parse(dateStr);
return true;
} catch (ParseException e) {
return false;
}
}
private static Date parse(SimpleDateFormat dateFormat, String dateStr) {
try {
return dateFormat.parse(dateStr);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}

如果您需要任何新的模式,只需将其添加到该常量数组的列表中。

try this:

String data = "Mon Mar 01 15:19:58 +0000 2021";
try {
Date date = formatter.parse(data);
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String expecteddate = format.format(date);
System.out.println(expecteddate);
} catch (ParseException e) {
e.printStackTrace();
}

感谢每一个帮助过我的人,我将留下我所使用的方案,感谢你们的帮助。

public String getDataHoraAtual(String data) throws ParseException {
if(data == null) {
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
return dateFormat.format(date);
}
DateFormat entrada = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US);
DateFormat saida = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.US);
Date date = entrada.parse(data);
return saida.format(date);
}

相关内容

  • 没有找到相关文章

最新更新