英文:
simpledate formater to format returns incorrect.deducted date after formating
问题
以下是翻译好的内容:
我正在尝试使用SimpleDateFormat来解析日期。日期成功解析,但输出的日期格式不正确,或者减少了一年。使用SimpleDateFormat的Date方法如下所示:
public Date parseDate(String date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date parsedDate = null;
try {
parsedDate = format.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return parsedDate;
}
这是解析的示例图像:
Date start = parseDate(dateVal); // dateVal示例为2020-09-25
当解析日期时,输出如下:
Sun Dec 29 00:00:00 WAT 2019
我的挑战是在解析后返回日期示例 - 2020-09-25。
英文:
I am attempting to parse date using SimpleDateFormat. The date is parsed successfully but the output date format is incorrect or deducted by a year, The Date method that uses SimpleDateFormat is shown below
public Date parseDate(String date) {
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-DD",Locale.ENGLISH);
Date parsedDate = null;
try {
parsedDate = format.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return parsedDate;
}
Here is the sample image parsed
Date start = parseDate(dateVal); // dateVal sample is 2020-09-25
When the date is parsed, this is the output
Sun Dec 29 00:00:00 WAT 2019
My challenge is to return a date sample of - 2020-09-25 after parsing
答案1
得分: 2
你可以这样做:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
parsedDate = format.parse(date);
你应该使用parse(String)
,而不是parseDate()
。
英文:
You can do it like so:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
parsedDate = format.parse(date);
You should be using parse(String)
instead of parseDate()
答案2
得分: 2
你使用了错误的符号。请使用 yyyy-MM-dd
替代 YYYY-MM-DD
。注意,DD
代表年中的天数,Y
代表周年。详细信息请查阅文档。
另外,我建议你从过时且容易出错的 java.util
日期时间 API 和 SimpleDateFormat
切换到现代的 java.time
日期时间 API 以及相应的格式化 API(位于包 java.time.format
中)。你可以从**教程:日期时间**中了解更多关于现代日期时间 API 的信息。
如果你在使用 Android,且你的 Android API 版本仍不支持 Java 8,请查阅 https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project 以及 通过 desugaring 可用的 Java 8+ API。
使用现代日期时间 API:
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.parse("2020-09-25");
System.out.println(date);
}
}
输出:
2020-09-25
注意,由于你的日期时间字符串已经处于 ISO8601 格式中,你在将其解析为 LocalDate
时无需使用任何 DateTimeFormatter
,因为这是 LocalDate#parse
默认使用的模式。
使用传统的日期时间 API:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2020-09-25");
System.out.println(date);
}
}
英文:
You have used the wrong symbols. Use yyyy-MM-dd
instead of YYYY-MM-DD
. Note that DD
stands for the Day of the year and Y
stands for Week year. Check the documentation to learn more about it.
Also, I recommend you switch from the outdated and error-prone java.util
date-time API and SimpleDateFormat
to the modern java.time
date-time API and the corresponding formatting API (package, java.time.format
). Learn more about the modern date-time API from Trail: Date Time.
If you are using Android and your Android API level is still not compliant with Java8, check https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project and Java 8+ APIs available through desugaring.
Using modern date-time API:
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.parse("2020-09-25");
System.out.println(date);
}
}
Output:
2020-09-25
Note that since your date-time string is already in the ISO8601 format, you do not need to use any DateTimeFormatter
while parsing it to LocalDate
as it is the default pattern used by LocalDate#parse
.
Using the legacy date-time API:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2020-09-25");
System.out.println(date);
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论