英文:
Reformat custom date from string
问题
I‘m fetching dates which have the format yyyy-MM-dd
.
I have these extracted as a string which would look like this:
String date = "2020-09-05";
Now I want to convert it into a EEE, d MMM yyyy
format, so the result should be: Sat, 5 Sep 2020
.
I tried reformatting it like this:
Date convertedDate = new SimpleDateFormat(EEE, d MMM yyyy).parse(date);
For some reason this and many tries to get around it all end up with a java.text.ParseException: Unparseable date "2020-09-05"
.
Can‘t I convert a date from a string like that? Is there a better way to reformat a string into other formats?
英文:
I‘m fetching dates which have the format yyyy-MM-dd
.
I have these extracted as a string which would look like this:
String date = "2020-09-05";
Now I want to convert it into a EEE, d MMM yyyy
format, so the result should be: Sat, 5 Sep 2020
.
I tried reformatting it like this:
Date convertedDate = new SimpleDateFormat(EEE, d MMM yyyy).parse(date);
For some reason this and many tries to get around it all end up with a java.text.ParseException: Unparseable date "2020-09-05"
.
Can‘t I convert a date from a string like that? Is there a better way to reformat a string into other formats?
答案1
得分: 3
你需要区分解析日期(将String
转换为Date
或LocalDate
类)和格式化日期(将Date
或LocalDate
类实例转换为String
)。
要解析初始字符串,请使用:
LocalDate convertedDate = LocalDate.parse(date);
要对convertedDate
进行格式化,请使用:
String formattedDate = convertedDate.format(DateTimeFormatter.ofPattern("EEE, d MMM yyyy"));
编辑:我假设您至少在使用Java 8,因此可以使用更新的日期/时间类。有关更多信息,请参阅 https://www.baeldung.com/java-8-date-time-intro。
英文:
You need to make a distinction between parsing the date (turning a String
into a Date
or LocalDate
class) and formatting a date (turning the Date
or LocalDate
class instance to a String
).
To parse the initial string, use:
LocalDate convertedDate = LocalDate.parse(date)
To format the convertedDate
, use:
String formattedDate = convertedDate.format(DateTimeFormatter.ofPattern("EEE, d MMM yyyy"))
EDIT: I am assuming you are at least on Java 8, so you can use the newer date/time classes. See https://www.baeldung.com/java-8-date-time-intro for some more info.
答案2
得分: 1
你混淆了解析和格式化:你的代码试图根据格式来解析一个字符串。你告诉 Java 你期望日期包含星期名称。
你需要首先按照它当前的格式解析你的日期。这将给你一个日期。然后你需要用所需的格式格式化你的日期,这将给你一个字符串:
final String dateString = "2020-09-05";
final Date date = new SimpleDateFormat("y-M-d").parse(dateString);
final String converted = new SimpleDateFormat("E, d MMM y").format(date);
英文:
You are mixing up parsing and formatting: your code is trying to parse a string given the format. You’re telling Java you’re expecting the date to contain the week name.
You need to first parse your date in the format it’s in. This will give you a date. You next need format your date with the desired format, which will give you a string:
final String dateString = "2020-09-05";
final Date date = new SimpleDateFormat("y-M-d").parse(dateString);
final String converted = new SimpleDateFormat("E, d MMM y").format(date);
答案3
得分: 0
以下是代码的翻译部分:
String sDate1 = "1998-12-31";
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(sDate1);
System.out.println("EEE, d MMM yyyy 格式的日期: " + new SimpleDateFormat("EEE, d MMM yyyy").format(date));
英文:
ok here's the code:
String sDate1="1998-12-31";
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(sDate1);
System.out.println("EEE, d MMM yyyy formatted date : " + new SimpleDateFormat("EEE, d MMM yyyy").format(date));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论