Java,更改日期格式。

时间:2016-02-19 09:46:13

标签: java

我想将日期格式从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);
}

5 个答案:

答案 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();