如何格式化java Date

问题描述 投票:1回答:5

我正在开发一个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)
java spring parsing date-format
5个回答
1
投票

如果您想将日期格式化为您自己的格式,如2013-06-06,SimpleDateFormatter是一种常见的解决方案。但是代码中出现的问题是您的格式化日期的返回类型错误。这是一个例子:

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。 sdf.parse用于将String转换为Date,而sdf.format用于将Date转换为指定格式的String。

sdf.parse返回Date,sdf.format返回String。


2
投票

这适用于您的情况:

    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

(Qazxswpoi)


1
投票

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

documentation

1
投票

请记住,DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy"); 类不是线程安全的,如果没有正确使用会导致多线程环境中的问题,这意味着你必须非常小心地在Spring中使用它,它是多线程环境。

为什么它不是线程安全的?

SimpleDateFormat类改变其内部状态以格式化和解析日期。这就是为什么当多个线程同时使用同一个SimpleDateFormat实例时会导致问题的原因。

如何在多线程环境中使用SimpleDateFormat?

有两种选择 -

  • 为每个线程创建一个SimpleDateFormat的新实例。
  • 使用synchronized关键字或锁同步多个线程的并发访问。
© www.soinside.com 2019 - 2024. All rights reserved.