将 java.util.Date 转换为字符串
我想将 java.util.Date 对象转换为 Java 中的 String 。
格式为2010-05-30 22:15:52
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我想将 java.util.Date 对象转换为 Java 中的 String 。
格式为2010-05-30 22:15:52
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(18)
使用
DateFormat#format
方法:来自 http://www.kodejava.org/examples/86.html
Convert a Date to a String using
DateFormat#format
method:From http://www.kodejava.org/examples/86.html
Commons-lang DateFormatUtils 充满了好东西(如果你的类路径中有 commons-lang)。
文档可以在这里找到: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateFormatUtils.html
Commons-lang DateFormatUtils is full of goodies (if you have commons-lang in your classpath).
Documentation can be found here: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateFormatUtils.html
普通旧式 java 中的替代单行代码:
这使用 格式化程序和相对索引 而不是
SimpleDateFormat
,即 不是线程安全的,顺便说一句。稍微重复一些,但只需要一个声明。
在某些情况下这可能很方便。
Altenative one-liners in plain-old java:
This uses Formatter and relative indexing instead of
SimpleDateFormat
which is not thread-safe, btw.Slightly more repetitive but needs just one statement.
This may be handy in some cases.
太长了;博士
java.time
现代方法是使用 java.time 类,它现在取代了麻烦的旧遗留日期时间类。
首先将您的
java.util.Date
转换为Instant
。即时
类代表 UTC 中时间轴上的时刻,分辨率为 纳秒(最多九 (9) 位小数)。与 java.time 之间的转换是通过添加到旧类中的新方法来执行的。
您的
java.util.Date
和java.time.Instant
都在 UTC。如果您想查看 UTC 格式的日期和时间,那就这样吧。调用toString
以标准 ISO 8601 格式生成字符串。对于其他格式,您需要将
Instant
转换为更灵活的OffsetDateTime
。查看代码在 IdeOne.com 上实时运行。
要获取所需格式的字符串,请指定
DateTimeFormatter
。您可以指定自定义格式。但我会使用预定义的格式化程序之一(ISO_LOCAL_DATE_TIME
),并将其输出中的T
替换为空格。顺便说一句,我不推荐这种故意丢失 与 UTC 的偏移量或时区信息。造成该字符串的日期时间值的含义含糊不清。
还要注意数据丢失,因为在日期时间值的字符串表示中,任何小数秒都会被忽略(有效地截断)。
要通过某个特定区域的挂钟时间查看同一时刻,请应用
ZoneId
来获取ZonedDateTime
。要生成格式化字符串,请执行与上面相同的操作,但将
odt
替换为zdt
。如果多次执行此代码,您可能希望提高效率并避免调用
String::replace
。删除该调用也会使您的代码更短。如果需要,请在您自己的DateTimeFormatter
对象中指定您自己的格式模式。将此实例缓存为常量或成员以供重用。通过传递实例来应用该格式化程序。
关于 java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧日期时间类,例如
java.util.Date
,.Calendar
, &java.text.SimpleDateFormat
。Joda-Time 项目,现已在 维护模式,建议迁移到 java.time。
要了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。
许多 java.time 功能都向后移植到 Java 6 和 Java 6。 ThreeTen-Backport 中的 7 并进一步适应 Android 在 ThreeTenABP(请参阅如何使用...)。
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。
tl;dr
java.time
The modern way is with the java.time classes that now supplant the troublesome old legacy date-time classes.
First convert your
java.util.Date
to anInstant
. TheInstant
class represents a moment on the timeline in UTC with a resolution of nanoseconds (up to nine (9) digits of a decimal fraction).Conversions to/from java.time are performed by new methods added to the old classes.
Both your
java.util.Date
andjava.time.Instant
are in UTC. If you want to see the date and time as UTC, so be it. CalltoString
to generate a String in standard ISO 8601 format.For other formats, you need to transform your
Instant
into the more flexibleOffsetDateTime
.See that code run live at IdeOne.com.
To get a String in your desired format, specify a
DateTimeFormatter
. You could specify a custom format. But I would use one of the predefined formatters (ISO_LOCAL_DATE_TIME
), and replace theT
in its output with a SPACE.By the way I do not recommend this kind of format where you purposely lose the offset-from-UTC or time zone information. Creates ambiguity as to the meaning of that string’s date-time value.
Also beware of data loss, as any fractional second is being ignored (effectively truncated) in your String’s representation of the date-time value.
To see that same moment through the lens of some particular region’s wall-clock time, apply a
ZoneId
to get aZonedDateTime
.To generate a formatted String, do the same as above but replace
odt
withzdt
.If executing this code a very large number of times, you may want to be a bit more efficient and avoid the call to
String::replace
. Dropping that call also makes your code shorter. If so desired, specify your own formatting pattern in your ownDateTimeFormatter
object. Cache this instance as a constant or member for reuse.Apply that formatter by passing the instance.
About java.time
The java.time framework is built into Java 8 and later. These classes supplant the troublesome old date-time classes such as
java.util.Date
,.Calendar
, &java.text.SimpleDateFormat
.The Joda-Time project, now in maintenance mode, advises migration to java.time.
To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations.
Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport and further adapted to Android in ThreeTenABP (see How to use…).
The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time.
为什么不使用 Joda (org.joda.time.DateTime)?
这基本上是一个单线。
Why don't you use Joda (org.joda.time.DateTime)?
It's basically a one-liner.
您似乎正在寻找 SimpleDateFormat。
格式:yyyy-MM-dd kk:mm:ss
It looks like you are looking for SimpleDateFormat.
Format: yyyy-MM-dd kk:mm:ss
单次;)
获取日期
获取时间
获取日期和时间
快乐编码:)
In single shot ;)
To get the Date
To get the Time
To get the date and time
Happy coding :)
以下是使用新的 Java 8 Time API 格式化 legacy
java.util.Date
:DateTimeFormatter
的优点是它可以有效地缓存,因为它是线程安全的(与SimpleDateFormat
不同)。预定义格式和模式表示法参考列表< /a>.
学分:
如何使用 LocalDateTime 解析/格式化日期? (Java 8)
Java8 java.util.Date转换为 java.time.ZonedDateTime
将 Instant 格式化为String
java 8 ZonedDateTime 和 OffsetDateTime 之间有什么区别?
Here are examples of using new Java 8 Time API to format legacy
java.util.Date
:It is nice about
DateTimeFormatter
that it can be efficiently cached as it is thread-safe (unlikeSimpleDateFormat
).List of predefined fomatters and pattern notation reference.
Credits:
How to parse/format dates with LocalDateTime? (Java 8)
Java8 java.util.Date conversion to java.time.ZonedDateTime
Format Instant to String
What's the difference between java 8 ZonedDateTime and OffsetDateTime?
如果您只需要日期中的时间,则可以使用 String 的功能。
这将自动剪切字符串的时间部分并将其保存在
timeString
中。If you only need the time from the date, you can just use the feature of String.
This will automatically cut the time part of the String and save it inside the
timeString
.最简单的使用方法如下:
其中“yyyy-MM-dd'T'HH:mm:ss”是读取日期输出的格式
:Sun Apr 14 16:11:48 EEST 2013
注意:HH 与 hh
- HH指24小时时间格式
- hh 指 12 小时时间格式
The easiest way to use it is as following:
where "yyyy-MM-dd'T'HH:mm:ss" is the format of the reading date
output: Sun Apr 14 16:11:48 EEST 2013
Notes: HH vs hh
- HH refers to 24h time format
- hh refers to 12h time format
让我们试试这个
或者一个实用函数
来自 Convert Java 中的日期转字符串
Let's try this
Or a utility function
From Convert Date to String in Java
一行选项
此选项可以使用简单的一行来写入实际日期。
One Line option
This option gets a easy one-line to write the actual date.
如果您想在结果字符串中包含时区信息:
If you want to include timezone information in the resultant string: