如何解决将字符串转换为日期使用不同的格式
我需要一些帮助来将字符串转换为日期,正如您所看到的,有几个关于它的主题,但是我需要转换的内容与互联网上可用的内容不同,所以我需要有人的帮助。
我通常收到的日期格式如下: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{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);
}
}
}
如果您需要任何新模式,只需将其添加到该常量数组的列表中即可。
,试试这个:
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。