繁体   English   中英

如何在日历中使用 SimpleDateFormat?

[英]How can I utilize SimpleDateFormat with Calendar?

我有 GregorianCalendar 实例,需要使用 SimpleDateFormat (或者可能与日历一起使用但提供所需的 #fromat() 功能的东西)来获得所需的输出。 请提出与永久解决方案一样好的变通方法。

试试这个:

Calendar cal = new GregorianCalendar();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
dateFormat.setTimeZone(cal.getTimeZone());
System.out.println(dateFormat.format(cal.getTime()));

eQui的答案错过了一步

Calendar cal = new GregorianCalendar();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
#---- This uses the provided calendar for the output -----
dateFormat.setCalendar(cal); 
System.out.println(dateFormat.format(cal.getTime()));

Calendar.getTime()返回一个可以与SimpleDateFormat一起使用的Date。

只需调用calendar.getTime()并将生成的Date对象传递给format方法。

时间

我建议您使用 java.time,现代 Java 日期和时间 API,来处理您的日期和时间工作。 所以不是GregorianCalendar 由于GregorianCalendar所有日期、时间和时区,因此现代的通用替代品是ZonedDateTime

您没有指定需要的输出是什么。 我假设我们想要为人类用户输出。 因此,对于用户的语言环境,请使用 Java 的内置本地化格式:

private static final DateTimeFormatter FORMATTER
        = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
                .withLocale(Locale.forLanguageTag("es"));

我指定了西班牙语作为示例。 如果您想使用 JVM 的默认语言环境,您可以指定Locale.getDefault(Locale.Category.FORMAT)或完全withLocale()withLocale()的调用。 现在格式化ZonedDateTime很简单(而且比使用GregorianCalendar更简单):

    ZonedDateTime zdt = ZonedDateTime.of(
            2011, 4, 11, 19, 11, 15, 0, ZoneId.of("Australia/Perth"));
    System.out.println(zdt.format(FORMATTER));

此示例的输出:

2011 年 4 月 11 日,AWST 19:11:15

如果您只需要日期而不需要一天中的时间或时区,则需要进行两项更改:

  1. 使用LocalDate而不是ZonedDateTime
  2. 使用DateTimeFormatter.ofLocalizedDate()而不是.ofLocalizedDateTime()

如果我真的得到了GregorianCalendar怎么办?

如果您从尚未升级到 java.time 的遗留 API 获得GregorianCalendar ,请转换为ZonedDateTime

    GregorianCalendar cal = new GregorianCalendar(
            TimeZone.getTimeZone(ZoneId.of("Australia/Perth")));
    cal.set(2011, Calendar.APRIL, 11, 19, 11, 15);
    ZonedDateTime zdt = cal.toZonedDateTime();

然后像以前一样继续。 输出将是相同的。

关联

Oracle 教程:解释如何使用 java.time 的日期时间

暂无
暂无

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

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