如何将 SimpleDateFormat 与日历结合使用?
我有 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
试试这个:
Try this:
eQui的答案缺少一个步骤
eQui's answer is missing a step
Calendar.getTime() 返回一个可与 SimpleDateFormat 一起使用的日期。
Calendar.getTime() returns a Date which can be used with SimpleDateFormat.
只需调用
calendar.getTime()
并将生成的Date
对象传递给format
方法即可。Simply call
calendar.getTime()
and pass the resultingDate
object to theformat
method.java.time
我建议您使用 java.time(现代 Java 日期和时间 API)来进行日期和时间工作。所以不是
GregorianCalendar
。由于GregorianCalendar
保存了所有日期、时间和时区,因此它的一般现代替代品是ZonedDateTime
。您没有指定需要的输出。我假设我们想要人类用户的输出。因此,请使用 Java 内置的本地化格式来表示用户的语言环境:
我指定西班牙语只是作为示例。如果您想使用 JVM 的默认语言环境,您可以指定
Locale.getDefault(Locale.Category.FORMAT)
或完全省略对withLocale()
的调用。现在,格式化ZonedDateTime
非常简单(并且比使用GregorianCalendar
更简单):此示例的输出:
如果您只需要日期而不需要时间或时区,则需要进行两项更改:
LocalDate
而不是ZonedDateTime
。DateTimeFormatter.ofLocalizedDate()
而不是.ofLocalizedDateTime()
。如果我真的有一个
GregorianCalendar
怎么办?如果您从尚未升级到 java.time 的旧 API 获得
GregorianCalendar
,请转换为ZonedDateTime
:然后像以前一样继续。输出将是相同的。
链接
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 aGregorianCalendar
was holding all of date, time of day and time zone, the general modern substitute for it isZonedDateTime
.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:
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 towithLocale()
completely. Now formatting aZonedDateTime
is straightforward (and simpler than it was with aGregorianCalendar
):Output from this example:
In case you only need dates and no time of day or time zone, you need two changes:
LocalDate
instead ofZonedDateTime
.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 toZonedDateTime
:Then proceed as before. Output will be the same.
Link
Oracle tutorial: Date Time explaining how to use java.time.