如何格式化java日期

6psbrbz9  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(465)

我在一个spring项目中工作,我必须按上传日期搜索文档。因此,当我将日期作为dao层中方法的参数传递时,它的接收方式如下: Thu Jun 06 00:03:49 WEST 2013 . 我想把它格式化为: 2013-06-06 我用这个代码来做,但它返回 06/06/13 dateformat的其他常量(如dateformat.medium,…)不会返回我正在等待的内容。

DateFormat shortDf = DateFormat.getDateInstance(DateFormat.SHORT);       
System.out.println(shortDf.format(new Date())); // return 06/06/13 it's short

我也尝试过这样的simpledateformat:

public static Date parseDate(String date, String format)throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat(format,Locale.ENGLISH);
return formatter.parse(date);
}

但它仍会引发解析异常:

java.text.ParseException: Unparseable date: "Thu Jun 06 00:23:33 WEST 2013"
at java.text.DateFormat.parse(DateFormat.java:337)
at TestApp.main(TestApp.java:20)
iklwldmw

iklwldmw1#

这在您的情况下应该有效:

DateFormat sourceFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
    DateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd");

    try {
        Date date = sourceFormat.parse("Thu Jun 06 00:23:33 WEST 2013");
        String formatted = targetFormat.format(date);
        System.out.println(formatted);
    } catch (ParseException e) {
        e.printStackTrace();
    }

首先,您需要使用正确的格式和区域设置(更改 Locale.US 任何适合你的)。您得到的异常是由不正确的解析格式或缺少区域设置引起的。

EEE MMM dd HH:mm:ss zzz  yyyy
Thu Jun 06 00:23:33 WEST 2013

然后使用以下格式化字符串格式化结果:

yyyy-MM-dd
2013-06-06

(文件)

r6hnlfcb

r6hnlfcb2#

这是我能得到的最接近的:

DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy");
lzfw57am

lzfw57am3#

记住这一点 SimpleDateFormat 类不是线程安全的,如果使用不当会在多线程环境中引起问题,这意味着您必须非常小心地在spring中使用它,因为它是多线程环境。
为什么它不是线程安全的?
这个 SimpleDateFormat 类为格式化和解析日期而改变其内部状态。这就是为什么当多个线程同时使用同一个simpleDataFormat示例时会出现问题。
如何在多线程环境中使用SimpleDataFormat?
有两种选择-
创建的新示例 SimpleDateFormat 对于每个线程。
使用同步关键字或锁同步多个线程的并发访问。

6qftjkof

6qftjkof4#

如果你想把日期格式化成你自己的格式,比如 2013-06-06 ,SimpleDataFormatter是常见的解决方案。但代码中的错误在于,格式化日期的返回类型错误。举个例子:

Date d=new Date();
String formattedDate=format(d);

System.out.println("This is your date: "+formattedDate);  

public String format(String date){
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
  return sdf.format(date);
}

要将日期格式化为您自己的格式,请使用sdf.format,而不是sdf.parse。
parse用于将字符串转换为日期,而sdf.format用于将日期转换为指定格式的字符串。
parse返回日期,sdf.format返回字符串。

相关问题