【问题标题】:I want to get a formatted Date in Java我想在 Java 中获取格式化的日期
【发布时间】:2012-01-02 17:53:26
【问题描述】:

我想获得一个新的Date 对象,并应用SimpleDateFormat。我想做类似的事情:

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

我不能这样做,因为今天是一个Date,而format 返回一个String。我也试过:

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

}

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

【问题讨论】:

  • 一个 Date 对象没有任何关联的格式,这就是 SimpleDateFormat 存在的原因......你的意思是什么?
  • 我正在使用一个接口,我必须在其中传递一个 Date 对象。 Date 对象需要以特定方式格式化。这是我的观点。我想知道怎么做,这样我就不必从 Date 转换回 Date 了。
  • 这两句话自相矛盾:“我正在使用一个接口,我必须在其中传递一个 Date 对象”——“Date 对象需要以特定方式格式化”。同样,Date 对象有无格式
  • 例如语句:Date today = new Date("12/12/2011");今天没有关于时区、小时、分钟、秒等信息的信息。如果这不称为格式化,您希望我如何描述它?
  • 是的,我知道我做错了。我误解了格式化日期对象的概念。

标签: java date simpledateformat


【解决方案1】:

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

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

所以我们的想法是,当您必须显示日期或必须以某种字符串表示形式存储日期时,您将使用 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

【讨论】:

  • 例如语句:Date today = new Date("12/12/2011");今天没有关于时区、小时、分钟、秒等的信息。这就是我所说的格式。我目前正在获取一个日期对象,但我希望在发送之前删除一些数据(如秒数)。
【解决方案2】:

我认为您试图实现的目标没有意义。

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

【讨论】:

    【解决方案3】:

    我认为您在这里误解了 Date 对象是什么。 Date 只是保存有关某个时间点的信息——它根本没有格式。当涉及到DateString 表示 时,这就是格式化发挥作用的地方。仅在以下情况下担心格式:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 嗯,我使用的接口需要有一个日期对象发送给它。日期对象需要以某种方式格式化(比如没有附加秒数)。你能建议我这样做的方法吗?
      • 严格来说,这不是格式化。这听起来更像是限制Date 的精度,例如通过确保时间组件始终具有固定值 00:00:00。
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-04
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多