java - 如何初始化公历,日期为 YYYY-MM-DD 格式?

标签 java calendar gregorian-calendar

我有一个包含变量的类

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 点开始,因此上面的代码更加安全。

链接

ThreeTen Backport home

关于java - 如何初始化公历,日期为 YYYY-MM-DD 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44180575/

相关文章:

ios - IOS 中的自定义日历 View

java - 通用道 : @Transactional not working. 。再次

java - 属性文件存在,但仍然收到 "WARN No appenders could be found"

java - 性能 : Iterating through a List in Java

c# - 波斯日历对 CultureInfo 无效

android - 如何获取 Android 上具有日历的帐户列表?

java - java中获取时间戳

java - java 一年中最糟糕的一周

c# - 当客户端日历是非公历时,如何以公历格式获取 "DateTime.Now"?

java - 将C#代码迁移到Java,unsigned short和字节数组转换