我想将日期格式从yyyyMM更改为yyyy-MM。
我发现以下两种方式同样有效。但哪一个最好?我更喜欢methodTwo因为它更简单,但使用methodOne有什么优势吗?
public String date;
public void methodOne()
{
String newDate = date;
DateFormat formatter = new SimpleDateFormat("yyyyMM");
DateFormat wantedFormat = new SimpleDateFormat("yyyy-MM");
Date d = formatter.parse(newDate);
newDate = wantedFormat.format(d);
date = newDate;
}
public void methodTwo()
{
date = date.substring(0, 4) + "-" + date.substring(4, 6);
}
答案 0 :(得分:4)
您应该更喜欢方法一,因为它可以检测输入日期是否格式无效。当不能保证输入日期始终采用相同的格式时,方法二可能会导致问题。当您稍后想要更改输入或输出格式时,方法一也更容易调整。
如果性能真的很重要,使用方法二是有意义的,因为它应该比方法一稍快。
答案 1 :(得分:3)
我会说methodOne更通用。如果您需要再次更改所需格式,则只需更改参数" yyyy-MM"无论你想要什么样的新格式,无论它多么具有异国情调。我发现当你与世界各地的人合作时,methodOne比使用子串更有用,也更容易阅读。使用子字符串意味着您无法确保即将发生的内容具有您期望的格式。你可能会以错误的顺序分裂。
答案 2 :(得分:1)
以简单的方式获取它:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String date = sdf.format(yourDate);
答案 3 :(得分:1)
使用SimpleDateFormat是行业标准。它将来更容易阅读和维护,因为它允许轻松更改格式。
答案 4 :(得分:1)
java.time.YearMonth
还有第三种方法:使用Java 8及更高版本中内置的YearMonth
类作为java.time框架的一部分。
您没有日期和时间,因此使用日期时间类(如java.util.Date)甚至java.time类型(Instant,OffsetDateTime,ZonedDateTime)都不合适。因为你只有一年零一个月使用,所以YearMonth
- 完美契合。
不是传递代码中的字符串,而是传递这些YearMonth
值。然后,您将获得类型安全性和有效值。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuuyy");
YearMonth ym = YearMonth.parse( input );
YearMonth::toString
方法使用的默认格式使用您想要的标准ISO 8601格式。
String output = ym.toString();