Java SimpleDateFormat 解析时忽略月份
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3056703/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SimpleDateFormat ignoring month when parsing
提问by manu
The following code is giving me the parsed date as "Wed Jan 13 00:00:00 EST 2010" instead of "Wed Jun 13 00:00:00 EST 2010". Any ideas much appreciated.
以下代码为我提供了解析日期为“Wed Jan 13 00:00:00 EST 2010”而不是“Wed Jun 13 00:00:00 EST 2010”。任何想法都非常感谢。
SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss");
String str = "2010-06-13T00:00:00";
Date date = sf.parse(str);
System.out.println(" Date " + date.toString());
采纳答案by Mark Byers
Try:
尝试:
"yyyy-MM-dd'T'HH:mm:ss"
MM
means month. mm
means minutes. See the documentation for SimpleDateFormat
for more details of the supported date and time patterns.
MM
表示月份。mm
表示分钟。有关SimpleDateFormat
支持的日期和时间模式的更多详细信息,请参阅文档。
回答by heloisasim
The problem is that you're using 'mm' as month and 'mm' represents minutes. Below is all date formats available, read more doc here.
问题是您使用 'mm' 作为月份,而 'mm' 代表分钟。以下是所有可用的日期格式,请在此处阅读更多文档。
Symbol Meaning Kind Example
D day in year Number 189
E day of week Text E/EE/EEE:Tue, EEEE:Tuesday, EEEEE:T
F day of week in month Number 2 (2nd Wed in July)
G era designator Text AD
H hour in day (0-23) Number 0
K hour in am/pm (0-11) Number 0
L stand-alone month Text L:1 LL:01 LLL:Jan LLLL:January LLLLL:J
M month in year Text M:1 MM:01 MMM:Jan MMMM:January MMMMM:J
S fractional seconds Number 978
W week in month Number 2
Z time zone (RFC 822) Time Zone Z/ZZ/ZZZ:-0800 ZZZZ:GMT-08:00 ZZZZZ:-08:00
a am/pm marker Text PM
c stand-alone day of week Text c/cc/ccc:Tue, cccc:Tuesday, ccccc:T
d day in month Number 10
h hour in am/pm (1-12) Number 12
k hour in day (1-24) Number 24
m minute in hour Number 30
s second in minute Number 55
w week in year Number 27
G era designator Text AD
y year Number yy:10 y/yyy/yyyy:2010
z time zone Time Zone z/zz/zzz:PST zzzz:Pacific Standard
回答by Noorul
Example if Date is 06 07 2016
日期为 06 07 2016 的示例
SimpleDateFormat sdf= new SimpleDateFormat("dd MM yyyy");
you can use comma, full-stop, slash, or hyphen between these format.
您可以在这些格式之间使用逗号、句号、斜线或连字符。
Ex: dd-mm-yyyy, it will display like(06-07-2016)
dd/mm/yyyy,it will display like(06/07/2016)
dd.mm.yyyy,it will display like(06.07.2016)
dd,mm,yyyy ,it will display like(06,07,2016)
MM - will display number of the Month.
MMM - will display Month Three character only(Ex: Jul)
MMMM - will display full month(Ex: July)
yyyy - will display full year(2016)
yy - will display last two digits(16)
hh - will display hours
mm -will display minutes
ss - will display seconds
a - will display AM or PM
Ex: if time is 12:09:10 PM means (hh:mm:ss a)
EEE- will display short week name(Ex: Wed)
EEEE- will display full week name(Ex: Wednesday)
回答by Ole V.V.
Modern answer:
现代答案:
String str = "2010-06-13T00:00:00";
LocalDateTime dateTime = LocalDateTime.parse(str);
System.out.println("Date-time " + dateTime);
Output:
输出:
Date-time 2010-06-13T00:00
日期时间 2010-06-13T00:00
I am using and recommending java.time
, the modern Java date and time API. We don't even need an explicit formatter for parsing. This is because your string is in ISO 8601 format, the international standard that the java.time
classes parse as their default. java.time
came out in 2014.
我正在使用和推荐java.time
现代 Java 日期和时间 API。我们甚至不需要用于解析的显式格式化程序。这是因为您的字符串采用 ISO 8601 格式,这是java.time
类解析为默认值的国际标准。java.time
2014年问世。
While in 2010 when this question was asked, SimpleDateFormat
was what we had for parsing dates and times, that class is now considered long outdated, fortunately, because it was also troublesome.
虽然在 2010 年提出这个问题时,SimpleDateFormat
我们有什么用于解析日期和时间,但幸运的是,该类现在被认为已经过时了,因为它也很麻烦。
In case your string contained only a datewithout time of day, use the LocalDate
class in quite the same manner (this was asked in a duplicate question).
如果你的字符串只包含一个日期没有一天的时间,用LocalDate
在完全同样地类(这是在问一个重复的问题)。
String dateStr = "2018-05-23";
LocalDate date2 = LocalDate.parse(dateStr);
System.out.println(date2);
2018-05-23
2018-05-23
Link:Oracle tutorial: Date Timeexplaining how to use java.time
.
链接:Oracle 教程:解释如何使用java.time
.