Java,更改日期格式。

Java,更改日期格式。,java,Java,我想将日期格式从yyyyMM更改为yyyy MM 我发现以下两种方法同样有效。但是哪一个是最好的呢?我更喜欢Method2,因为它更简单,但是使用Method1有什么好处吗 public String date; public void methodOne() { String newDate = date; DateFormat formatter = new SimpleDateFormat("yyyyMM"); DateFormat wantedFormat

我想将日期格式从yyyyMM更改为yyyy MM

我发现以下两种方法同样有效。但是哪一个是最好的呢?我更喜欢Method2,因为它更简单,但是使用Method1有什么好处吗

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);
}

您应该更喜欢方法一,因为它可以检测输入日期的格式是否无效。方法二可能会导致问题,因为无法保证输入日期始终采用相同的格式。当您以后想要更改输入或输出格式时,方法一也更容易调整


如果性能真的很重要,那么使用方法二是有意义的,因为它应该比方法一快一点。

我认为方法一更通用。如果需要再次更改所需的格式,则只需为所需的任何新格式更改参数“yyyy-MM”,无论它有多奇特。我发现当你与世界各地的人一起工作时,methodOne比使用子字符串更有用,也更容易阅读。使用子字符串意味着您无法确保接下来的内容具有您期望的格式。您可能按错误的顺序进行拆分。

以一种简单的方式进行拆分:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String date = sdf.format(yourDate);

使用SimpleDataFormat是行业标准。将来更容易阅读和维护,因为它允许轻松更改格式。

java.time.YearMonth
还有第三种方法:使用Java 8和更高版本中内置的类作为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();

如果没有其他时间/内存限制的话,第一个更具可读性,我更喜欢它。不过,这个问题是基于意见的。谢谢你,这就是我想要的答案。我接受了你的回答,因为你是第一个回答的。