我有 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
. 我究竟做错了什么?
16 回答
请参考"Date and Time Patterns" . http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
[编辑包含BalusC的更正] SimpleDateFormat类应该可以解决问题:
删除一个y表单
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
应为SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
您可以尝试java 8 new
date
,更多信息可以在oracle documentation上找到 .或者你可以尝试旧的
如果字符串碰巧包含时区部分,则使用LocalDateTime#parse()(或ZonedDateTime#parse())将某个模式中的
String
解析为LocalDateTime
.使用LocalDateTime#format()(或ZonedDateTime#format())将
LocalDateTime
格式化为特定模式的String
.Or ,当您还没有使用Java 8时,使用SimpleDateFormat#parse()以某种模式将
String
解析为Date
.使用SimpleDateFormat#format()以特定模式将
Date
格式化为String
.另见:
Update :根据您的尝试失败:模式为 case sensitive . 阅读java.text.SimpleDateFormat javadoc各个部分代表什么 . 因此,例如
M
表示月份,m
表示分钟 . 此外,存在四位数yyyy
,而不是五位yyyyy
. 仔细看看我在上面发布的代码片段 .格式化是CASE-SENSITIVE因此使用MM不是mm(这是分钟)和yyyy对于Reference你可以使用以下cheatsheet .
例子:
为什么不简单地使用它
另外,这是另一种方式:
要么
干杯!
你也可以使用substring()
如果您想在日期前面留出空格,请使用
你可以使用:
它完美地运作!
答案当然是创建一个SimpleDateFormat对象并使用它来将字符串解析为Date并将Dates格式化为字符串 . 如果你已经尝试过SimpleDateFormat并且它不起作用,那么请显示你的代码以及你可能收到的任何错误 .
附录:格式为String的“mm”与“MM”不同 . 使用MM数月,mm使用数分钟 . 而且,yyyyy与yyyy不同 . 例如 . ,:
在Java 8及更高版本中使用
java.time
包:其他答案是正确的,基本上你的模式中有“y”字符错误 .
时区
还有一个问题......你没有解决时区问题 . 如果您打算UTC,那么您应该这样说 . 如果没有,答案就不完整了 . 如果您想要的只是没有时间的日期部分,那么没有问题 . 但是如果你做了可能涉及时间的进一步工作,那么你应该指定一个时区 .
Joda-Time
这是相同类型的代码,但使用第三方开源Joda-Time 2.3库
跑的时候......