防止使用SimpleDateFormatter两次

时间:2015-01-20 17:22:26

标签: java date

我有一个String格式EEE, dd MMM yy hh:mm:ss Z,我希望将其转换为Date对象,所以我这样做了,

SimpleDateFormat fDate = new SimpleDateFormat("EEE, dd MMM yy hh:mm:ss Z",Locale.getDefault());

然后我创建了Date

类型的实例字段

Date toDate = null;

并解析我的String日期并将其存储到toDate

toDate = fDate.parse(stringDate);

现在,日期存储在toDate变量中,格式为

Tue Jan 20 07:33:06 GMT+05:30 2015

但这不是我想要的。 我想要这个形式的最终Date对象,

Tue Jan 20, 2015

因此,为了实现这一目标,我创建了新的Calendar对象并将其时间设置为toDate

Calendar s = Calendar.getInstance();
s.setTime(toDate);

然后我创建一个新的String并存储Day of WeekMonth Day of Monthyear以获取此格式Tue Jan 20, 2015

String newDate = s.getDisplayName(Calendar.DAY_OF_WEEK,0,Locale.getDefault()) + " "
+ s.getDisplayName(Calendar.MONTH, 0, Locale.getDefault())
+ " " + s.get(Calendar.DAY_OF_MONTH) + ","
+ s.get(Calendar.YEAR);

现在,我的新字符串newDate的日期格式为Tue Jan 20, 2015,问题是它是String对象,而不是Date对象,并且按顺序要将其转换为Date对象,我必须再次使用SimpleDateFormatter

但这需要做很多工作,因为为了将此表单的String EEE, dd MMM yy hh:mm:ss Z转换为此表单的Date对象Tue Jan 20, 2015,我是第一个使用SimpleDateFormatter然后我在Date对象中解析它,然后使用DateCalendar对象中提取我的欲望字段并存储在String中,然后将String转换回Date对象。

有没有更简单的方法来实现这一目标?即,将此String EEE, dd MMM yy hh:mm:ss Z直接转换为Tue Jan 20, 2015类格式Date而不使用SimpleDateFormatter两次?

1 个答案:

答案 0 :(得分:1)

虽然Java Date库非常糟糕(这几乎是每个人都使用Joda-Time库的原因,以及为什么Oracle使用Java 8发布了新的java.time package(参见article),有几点需要注意:

  1. 所有java.util.Date表示自midnight, Jan 1, 1970 in UTC以来的毫秒数。换句话说,java.util.Date实际上只是long值的一个小包装。
  2. 因此,java.util.Date不存储任何类型的格式信息。 Date.toString()总是在人类可读的" debug"中生成一个String。格式。
  3. 要回答你的问题,不,实际上没有办法阻止使用SimpleDateFormatter两次,但我不明白你为什么要避免这种情况,除此之外你似乎误解了这些概念日期代表什么。如果你有一个java.lang.String并想将它转换为java.util.Date,你可以使用DateFormat.parse(),如果你有java.util.Date并想将它转换为java.lang .String,你使用DateFormat.format()。