如何使用YYYY-MM-DD格式初始化公历日历?

我有一个包含变量的类

private GregorianCalendar cal; 

现在我想用yyyy-mm-dd格式的日期初始化它,我尝试使用默认构造函数,但我得到的输出是这样的"2017-05-25T14:36:52+03:00" ,我只想要"2017-05-25"日期部分?

我该如何实现?

首先,你可能讨厌重申,你需要明白日期与该日期的字符串表示之间存在差异; 基础数据与其字符串表示之间的差异。

其次,如果需要, 可以LocalDate (以及其他Java日期和时间类)与Java 7一起使用。 它是(并且它们都是) 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小时开始这一天,因此上述代码更具防弹性。

链接

ThreeTen Backport回家

您可以尝试使用SimpleDateFormat作为示例:

 GregorianCalendar cal = new GregorianCalendar(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); format.setCalendar(cal); String result = format.format(cal.getTime()); System.out.println(result);//today is 2017-05-25 

要将String转换为GregorianCalendar

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssX"); Date date = format.parse("2017-05-25T14:36:52+03:00"); GregorianCalendar cal2 = new GregorianCalendar(); cal2.setTime(date);