如何将 SimpleDateFormat 与日历结合使用?

发布于 2024-11-01 01:00:52 字数 119 浏览 0 评论 0原文

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

I've got GregorianCalendar instances and need to use SimpleDateFormat (or maybe something that can be used with calendar but that provides required #fromat() feature) to get needed output. Please, suggest work arounds as good as permanent solutions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

鸠书 2024-11-08 01:00:52

试试这个:

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

Try this:

Calendar cal = new GregorianCalendar();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
dateFormat.setTimeZone(cal.getTimeZone());
System.out.println(dateFormat.format(cal.getTime()));
破晓 2024-11-08 01:00:52

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()));

eQui's answer is missing a step

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()));
内心荒芜 2024-11-08 01:00:52

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

Calendar.getTime() returns a Date which can be used with SimpleDateFormat.

时光倒影 2024-11-08 01:00:52

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

Simply call calendar.getTime() and pass the resulting Date object to the format method.

不一样的天空 2024-11-08 01:00:52

java.time

我建议您使用 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() 的调用。现在,格式化 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。

java.time

I recommend that you use java.time, the modern Java date and time API, for your date and time work. So not GregorianCalendar. Since a GregorianCalendar was holding all of date, time of day and time zone, the general modern substitute for it is ZonedDateTime.

You didn’t specify what needed output would be. I am assuming that we want output for a human user. So use Java’s built in localized format for the user’s locale:

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

I specified Spanish language just as an example. If you want to use the JVM’s default locale, you may either specify Locale.getDefault(Locale.Category.FORMAT) or leave out the call to withLocale() completely. Now formatting a ZonedDateTime is straightforward (and simpler than it was with a GregorianCalendar):

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

Output from this example:

11 de abril de 2011, 19:11:15 AWST

In case you only need dates and no time of day or time zone, you need two changes:

  1. Use LocalDate instead of ZonedDateTime.
  2. Use DateTimeFormatter.ofLocalizedDate() instead of .ofLocalizedDateTime().

What if I really got a GregorianCalendar?

If you got a GregorianCalendar from a legacy API not yet upgraded to java.time, convert to ZonedDateTime:

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

Then proceed as before. Output will be the same.

Link

Oracle tutorial: Date Time explaining how to use java.time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文