在Java字符串中更改日期格式

514

我有一个表示日期的 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。我做错了什么?


182
"yyyyy不同于yyyy。:)" - Hovercraft Full Of Eels
2
一个回旋镖式的问题。你的使用场景是什么?因为有可能你应该使用内置模式(DateFormat.getDateTimeInstance())。 - Paweł Dyda
13
格式字符串中表示月份的是MM,而不是像上面的例子中所示的mm,mm代表分钟。 - Mike
3
我将yyyy-mm-dd更改为yyyy-MM-dd,因为初始版本无法运行。 - Pavlo Zvarych
2
"mm"是分钟数 :) - Fuad Efendi
"yyyyy-MM-dd hh:mm:ss": - Guilherme
23个回答

0

假设你想将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。

只需从此函数返回一个字符串即可。

public String convertToOnlyDate(String currentDate) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a ");
    Date date;
    String dateString = "";
    try {
        date = dateFormat.parse(currentDate);
        System.out.println(date.toString()); 

        dateString = dateFormat.format(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return dateString;
}

这个函数将返回您想要的答案。如果您想要更多自定义,请从日期格式中添加或删除组件。


-1
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");

这个日期时间类在多年前就被现代的java.time类所取代。具体来说,是DateTimeFormatterDateTimeFormatterBuilder。在2019年建议使用SimpleDateFormat是不好的建议。 - Basil Bourque
你的格式代码有误。hh 是小时的表示,不是分钟。 - Basil Bourque
1
通常我们期望一些讨论或解释。Stack Overflow 的目的不仅仅是代码片段库。 - Basil Bourque

-1

首先,你的年份被0填充了,因为你使用了5个y字符,而不是4个。

其次,你使用了小写的m,而你需要一个大写的M

String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dt1.format(date));

输出

2011-01-18

你也可以使用 String.format,并带上 %tF 修饰符。
这会映射到 ISO 8601 日期格式,即 yyyy-MM-dd。
请参阅 Formatter (Java SE 20 & JDK 20)

System.out.printf("%tF", date.getTime());

1
感谢您想要贡献。(1)不应再使用臭名昭著的问题多且早已过时的SimpleDateFormat。在我看来,帮助人们如何做这件事是对他们的不利之举。(2)SimpleDateFormat在解析时并不关心是否有4个或5个y。即使你想使用那个坏的类,你也走错了路。(3)你没有覆盖原始代码的所有问题。旧的答案做得更好。 - Ole V.V.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接