Java,更改日期格式。

4

我希望将日期的格式从“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);
}

如果没有其他时间/内存限制,第一个更易读,我更喜欢它。不过,这个问题是基于个人意见的。 - awesoon
5个回答

4
你应该选择第一种方法,因为它可以检测输入日期是否具有无效格式。当不能保证输入日期始终在相同的格式时,第二种方法可能会导致问题。当你想要更改输入或输出格式时,第一种方法也更容易调整。如果性能真的很重要,使用第二种方法可能是有意义的,因为它应该比第一种方法稍微快一点。

1
谢谢,这正是我想要的答案。我接受了你的回答,因为你是第一个回答的人。 - user2939293

3

我认为methodOne更为通用。如果您需要再次更改所需的格式,您只需更改参数“yyyy-MM”为您想要的任何新格式,无论多么奇特。我发现,当您与世界各地的人合作时,methodOne比使用子字符串更加有用,也更容易阅读。使用子字符串意味着您无法确定接收到的内容是否具有您期望的格式。您可能会按错误顺序拆分。


1
使用SimpleDateFormat是行业标准。它更易于阅读和维护,因为它允许轻松更改格式。

1
以简单的方式获取它:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String date = sdf.format(yourDate);

1

java.time.YearMonth

有第三种方式:使用 Java 8 及其之后版本的 java.time 框架中内置的 YearMonth 类。

你没有日期和时间,因此使用诸如 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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接