更改 Java 字符串中的日期格式
我有一个代表日期的String
。
String date_s = "2011-01-18 00:00:00.0";
我想将其转换为 Date
并以 YYYY-MM-DD
格式输出。
2011-01-18
我怎样才能做到这一点?
好的,根据我在下面检索到的答案,这是我尝试过的方法:
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));
但它输出 02011-00-1
而不是所需的 2011-01-18
。我做错了什么?
I've a String
representing a date.
String date_s = "2011-01-18 00:00:00.0";
I'd like to convert it to a Date
and output it in YYYY-MM-DD
format.
2011-01-18
How can I achieve this?
Okay, based on the answers I retrieved below, here's something I've tried:
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));
But it outputs 02011-00-1
instead of the desired 2011-01-18
. What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(23)
您可以尝试Java 8新的
date
,更多信息可以在Oracle 文档。或者你可以尝试旧的
You could try Java 8 new
date
, more information can be found on the Oracle documentation.Or you can try the old one
您还可以使用 substring()
如果您想在日期前面有一个空格,请使用
You can also use substring()
If you want a space in front of the date, use
从格式中删除一个 y 提供给:
它应该是:
remove one y form the format provide to:
It should be:
我们可以将今天的日期转换为'JUN 12, 2020'的格式。
We can convert Today's date in the format of 'JUN 12, 2020'.
假设您想将 2019-12-20 10:50 AM GMT+6:00 更改为 2019-12-20 10:50 AM
首先你必须了解日期格式第一个日期格式是
yyyy-MM-dd hh:mm a zzz 和第二个日期格式将是 yyyy-MM-dd hh:mm a
只是从该函数返回一个字符串,例如。
该函数将返回您想要的答案。如果您想进行更多自定义,只需在日期格式中添加或删除组件即可。
Say you want to change 2019-12-20 10:50 AM GMT+6:00 to 2019-12-20 10:50 AM
first of all you have to understand the date format first one date format is
yyyy-MM-dd hh:mm a zzz and second one date format will be yyyy-MM-dd hh:mm a
just return a string from this function like.
This function will return your desire answer. If you want to customize more just add or remove component from the date format.
你有一些错误:
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
第一的 :
应该是
new SimpleDateFormat("yyyy-mm-dd");
//yyyy 4 而不是 5
此显示 02011,但 yyyy 显示 2011
第二:
像这样改变你的代码
new SimpleDateFormat("yyyy-MM-dd");
希望对您有帮助
you have some wrong:
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
first :
should be
new SimpleDateFormat("yyyy-mm-dd");
//yyyy 4 not 5
this display 02011, but yyyy it disply 2011
second:
change your code like this
new SimpleDateFormat("yyyy-MM-dd");
i hope help you
java.time
2014 年 3 月,现代日期时间 API* API 取代了容易出错的
java.util
日期时间 API 及其格式化 APISimpleDateFormat.从那时起,强烈建议停止使用旧版 API。
另外,下面引用的是Joda-Time主页的通知< /a>:
您不需要
DateTimeFormatter
进行格式化您仅需要
DateTimeFormatter
来解析字符串,但不需要DateTimeFormatter
来获取所需的日期格式。现代日期时间 API 基于 ISO 8601,因此toStringjava.time
类型的 code> 实现返回 ISO 8601 格式的字符串。您所需的格式是默认格式LocalDate#toString
。使用现代日期时间 API
java.time
的解决方案:输出:
在线演示
有关解决方案的一些重要说明:
java.time
使得调用成为可能日期时间类型本身,除了传统方式(即调用parse
和format
函数格式化程序类型,如果是java.time
API,则为DateTimeFormatter
)。y
而不是u
,但我更喜欢u
到y
。通过跟踪:日期时间<了解有关现代日期时间 API 的更多信息/a>。
* 无论出于何种原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport 将大部分 java.time 功能向后移植到 Java 6 和 Java 6 7. 如果您正在处理 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请检查 通过脱糖提供 Java 8+ API 和 如何在Android项目中使用ThreeTenABP。
java.time
In March 2014, modern date-time API* API supplanted the error-prone
java.util
date-time API and their formatting API,SimpleDateFormat
. Since then it has been highly recommended to stop using the legacy API.Also, quoted below is a notice from the home page of Joda-Time:
You do not need
DateTimeFormatter
for formattingYou need
DateTimeFormatter
only for parsing your string but you do not need aDateTimeFormatter
to get the date in the desired format. The modern Date-Time API is based on ISO 8601 and thus thetoString
implementation ofjava.time
types return a string in ISO 8601 format. Your desired format is the default format ofLocalDate#toString
.Solution using
java.time
, the modern Date-Time API:Output:
ONLINE DEMO
Some important notes about the solution:
java.time
made it possible to callparse
andformat
functions on the Date-Time type itself, in addition to the traditional way (i.e. callingparse
andformat
functions on the formatter type, which isDateTimeFormatter
in case ofjava.time
API).y
instead ofu
but I preferu
toy
.Learn more about the modern Date-Time API from Trail: Date Time.
* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and How to use ThreeTenABP in Android Project.
首先,您的年份被 0 填充,因为您使用了 5 个
y
字符,而不是 4 个。其次,您使用的是小写的
m
,而您需要大写M
。输出
您还可以使用带有
%tF
修饰符的String.format
。这映射到 ISO 8601 日期格式,即 yyyy-MM-dd。
请参阅 格式化程序 (Java SE 20 和 JDK 20)
First, your year is being 0 padded because you have used 5
y
characters, instead of 4.Secondly, you're using a lower case
m
, whereas you want a capitalM
.Output
You can also use a
String.format
, with a%tF
modifier.This maps to the ISO 8601 date format, which is yyyy-MM-dd.
See Formatter (Java SE 20 & JDK 20)
使用
LocalDateTime#parse()
(或ZonedDateTime#parse( )
(如果字符串恰好包含时区部分)将某种模式的String
解析为LocalDateTime
。然后使用
LocalDateTime#format()
(或ZonedDateTime#format()
) 到以某种模式将LocalDateTime
格式化为String
。或者,当您尚未使用 Java 8 时,请使用
SimpleDateFormat#parse()
解析String
以某种模式转换为Date
。然后使用
SimpleDateFormat#format()
以某种模式将Date
格式化为String
。另请参阅:
更新:根据您在发布此答案后添加到问题中的失败尝试;模式区分大小写。仔细阅读
java.text.SimpleDateFormat
javadoc 各个部分代表什么。例如,M
代表月份,m
代表分钟。此外,年份由四位yyyy
组成,而不是由五位yyyyy
组成。仔细看看我上面发布的代码片段。Use
LocalDateTime#parse()
(orZonedDateTime#parse()
if the string happens to contain a time zone part) to parse aString
in a certain pattern into aLocalDateTime
.Then use
LocalDateTime#format()
(orZonedDateTime#format()
) to format aLocalDateTime
into aString
in a certain pattern.Or, when you're not on Java 8 yet, use
SimpleDateFormat#parse()
to parse aString
in a certain pattern into aDate
.Then use
SimpleDateFormat#format()
to format aDate
into aString
in a certain pattern.See also:
Update: as per your failed attempt which you added to the question after this answer was posted; the patterns are case sensitive. Carefully read the
java.text.SimpleDateFormat
javadoc what the individual parts stands for. So stands for exampleM
for months andm
for minutes. Also, years exist of four digitsyyyy
, not fiveyyyyy
. Look closer at the code snippets I posted here above.格式区分大小写,因此请使用 MM 表示月份,而不是 mm(这是分钟)和 yyyy
对于参考,您可以使用以下备忘单。
示例:
Formatting are CASE-SENSITIVE so USE MM for month not mm (this is for minute) and yyyy
For Reference you can use following cheatsheet.
Examples:
答案当然是创建一个 SimpleDateFormat 对象并使用它来将字符串解析为日期并将日期格式化为字符串。如果您尝试过 SimpleDateFormat 但不起作用,请显示您的代码以及可能收到的任何错误。
附录:格式字符串中的“mm”与“MM”不同。使用 MM 表示几个月,使用 mm 表示分钟。此外,yyyyy 与 yyyy 不同。例如,:
The answer is of course to create a SimpleDateFormat object and use it to parse Strings to Date and to format Dates to Strings. If you've tried SimpleDateFormat and it didn't work, then please show your code and any errors you may receive.
Addendum: "mm" in the format String is not the same as "MM". Use MM for months and mm for minutes. Also, yyyyy is not the same as yyyy. e.g.,:
为什么不简单地使用这个
另外,这是另一种方式:
或
Why not simply use this
Also, this is the other way :
or
在 Java 8 及更高版本中使用
java.time
包:Using the
java.time
package in Java 8 and later:[编辑以包括 BalusC 的更正]
SimpleDateFormat 类应该可以解决问题:
[edited to include BalusC's corrections]
The SimpleDateFormat class should do the trick:
请参阅此处的“日期和时间模式”。 http://docs.oracle.com/javase/7 /docs/api/java/text/SimpleDateFormat.html
Please refer "Date and Time Patterns" here. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
其他答案是正确的,基本上你的模式中“y”字符的数量错误。
时区
不过还有一个问题……您没有解决时区问题。如果您想要UTC,那么您应该这么说。如果不是,那么答案就不完整。如果您想要的只是没有时间的日期部分,那么没问题。但如果您做的进一步工作可能涉及时间,那么您应该指定时区。
Joda-Time
这里是同样类型的代码,但使用第三方开源 Joda-Time 2.3 库
运行时...
Other answers are correct, basically you had the wrong number of "y" characters in your pattern.
Time Zone
One more problem though… You did not address time zones. If you intended UTC, then you should have said so. If not, the answers are not complete. If all you want is the date portion without the time, then no issue. But if you do further work that may involve time, then you should be specifying a time zone.
Joda-Time
Here is the same kind of code but using the third-party open-source Joda-Time 2.3 library
When run…
你可以直接使用:
它完美地工作了!
You can just use:
It works perfectly!