我想在Java中获得格式化的日期

时间:2012-01-02 17:53:26

标签: java date simpledateformat

我希望获得一个新的Date对象,其中应用了SimpleDateFormat。我想做点什么:

SimpleDateFormat myFormat = new SimpleDateFormat("dd MMM yyyy kkmm");
Date today = new Date();
today = myFormat.format(today);

我不能这样做,因为今天是Dateformat返回String。我也试过了:

Date today;
SimpleDateFormat myFormat = new SimpleDateFormat("dd MMM yyyy kkmm");
try{
    today = myFormat.parse((new Date()).toString());
}catch(Exception e){

}

这不是一个好的解决方案,因为当我今天尝试在其他地方使用时,Java抱怨今天可能没有实例化。更改Date对象格式的好方法是什么(同时仍保持Date对象,而不是将其转换为字符串)?

5 个答案:

答案 0 :(得分:5)

您正在错误地查看格式和日期。

  • 日期不包含格式。日期只是一个包含日期,月,小时,秒等日期信息的类。
  • SimpleDateFormat是告诉你Date的字符串表示的那个。但是没有与之相关的日期。

所以我们的想法是,当你必须显示日期或必须以某种字符串表示形式存储日期时,你将使用SimpleDateFormat并将它传递给你想要字符串表示的日期。

这样做的一个好处是,我可以使用相同的Date对象,并可以显示两个不同的字符串表示(使用两个不同的SimpleDateFormat实例)。而且,如果定义了一个SimpleDateFormat实例,我可以格式化多个日期。

编辑:

现在,如果您想从日期中删除一些信息。使用

Calendar rightNow = Calendar.getInstance();
Calendar cal = new GregorianCalendar(
   rightNow.get(YEAR),
   rightNow.get(MONTH),
   rightNow.get(DAY_OF_MONTH));
Date now = cal.getTime();

还有其他很好的解决方案,比如JodaTime

价:

GregorianCalendar Calendar Joda Time

答案 1 :(得分:0)

我认为你想要实现的目标没有意义。

Date对象代表时间。你不能格式化它。但是,您可以以某种格式获取字符串表示形式。与myFormat.format(today)一样。

答案 2 :(得分:0)

我认为你在这里误解了Date对象的内容。 Date只是保存有关某个时间点的信息 - 它根本没有格式。对于String的{​​{1}} 表示,这就是格式化的用武之地。只有在以下情况下才会担心格式:

  1. Date表示解析为String对象。
  2. Date转换回Date表示以便以某种方式显示它。

答案 3 :(得分:0)

你的问题没有意义。按定义格式化日期意味着使用特定格式将其转换为字符串。 Date对象可以作为Date对象保留。只有在您希望将其转换为String时才需要进行任何格式化。

答案 4 :(得分:0)

您无法将格式与Date对象关联,而只能在显示或其他活动时应用格式,

在Date对象本身中进行所有处理,并在单独显示时更改为所需格式,