[英]How can I Convert Calendar.toString() into date using SimpleDateFormat.parse()?
[英]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
如果您只需要日期而不需要一天中的时间或时区,则需要进行两项更改:
LocalDate
而不是ZonedDateTime
。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.