我有一个包含变量的类
private GregorianCalendar cal;
现在我想用 yyyy-mm-dd
格式的日期初始化它,我尝试使用默认构造函数,但我得到的输出类似于这样 "2017-05- 25T14:36:52+03:00"
,我只想要"2017-05-25"
日期部分?
如何实现它?
最佳答案
首先,您可能会讨厌我重申,您需要了解日期和该日期的字符串表示形式之间存在差异;基本数据与其字符串表示形式之间的差异。
其次,如果您愿意,您可以在 Java 7 中使用 LocalDate
(以及其他 Java 日期和时间类)。它(它们都)在 ThreeTen-Backport 中,Java SE 8 日期时间类向后移植到 Java SE 6 和 7。
由于我认为 LocalDate
更符合您的要求更多,我真的认为您应该考虑一下。因此,我建议不要使用您的cal
private LocalDate date = LocalDate.now(ZoneId.systemDefault());
还要考虑一下您是否想要 JVM 的当前时区设置(如上面所提供的)或者您想要控制您使用的时区。这将会带来改变。
最后,如果你真的坚持的话。正如您现在所理解的,我无法为您提供 GregorianCalendar
中的字符串。您可以丢弃 GregorianCalendar
的时间部分,这样您就只有日期部分。您可以将其格式化为您喜欢的字符串。
public class GregorianCalendarDemo {
private GregorianCalendar cal;
public GregorianCalendarDemo() {
cal = new GregorianCalendar(TimeZone.getDefault(), Locale.getDefault());
// discard time of day so we only have the date
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMinimum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getActualMinimum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMinimum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMinimum(Calendar.MILLISECOND));
}
protected GregorianCalendar getCal() {
return cal;
}
public String getFormattedCal() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(getCal().getTime());
}
}
当我刚刚调用 getFormattedCal()
时,它返回 2017-05-25
。
再次确定时区和区域设置的默认值是否合适或者您想要其他值。
您可能认为我们可以仅使用 cal.set(Calendar.HOUR_OF_DAY, 0):
来丢弃小时,并且类似地使用分钟和秒。它至少适用于 99% 的情况。然而,随着夏令时(夏令时)的过渡,这一天不能保证从 0 点开始,因此上面的代码更加安全。
链接
关于java - 如何初始化公历,日期为 YYYY-MM-DD 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44180575/