繁体   English   中英

Java,更改日期格式。

[英]Java, change date format.

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

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

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

我会说methodOne更通用。 如果你需要再次改变想要的格式,你只需要改变你想要的任何新格式的参数“yyyy-MM”,无论它有多么奇特。 我发现当你与世界各地的人合作时,methodOne比使用子串更有用,也更容易阅读。 使用子字符串意味着您无法确保即将发生的内容具有您期望的格式。 你可能会以错误的顺序分裂。

以简单的方式获取它:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM