[英]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.