微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将字符串转换为日期使用不同的格式

如何解决将字符串转换为日期使用不同的格式

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

我通常收到的日期格式如下: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 举报,一经查实,本站将立刻删除。