[英]Why does new java.text.SimpleDateFormat("EEEE").format(new java.util.Date(2015, 6, 9)) return the wrong day of the week?
我想从Java
的date
获取星期几。 为什么这会在Friday when
返回,而实际上是Tuesday
?
new java.text.SimpleDateFormat("EEEE").format(new java.util.Date(2015, 6, 9))
PS 我知道java.util.Date(int year, int month, int day)
已被弃用,也许这与它有关。
该已弃用的构造函数中的month
参数从1月的0
开始,因此new Date(115, 5, 9)
如果您要谈论6月9日( 115
是因为year
参数是“从1900开始”) new Date(115, 5, 9)
可能需要new Date(115, 5, 9)
)。
从文档中 :
参数:
year
-年减去1900。
month
- 0-11之间的月份。
date
-1到31之间的月份。
(我的重点。)
您已经说过要单线执行此操作。 在Java 8中,您可以执行以下操作:
String day = LocalDate.of(2015, 6, 9).format(DateTimeFormatter.ofPattern("EEEE"));
遗留的日期时间 API( java.util
日期时间类型及其格式化 API, SimpleDateFormat
)已经过时且容易出错。 建议完全停止使用它并切换到java.time
, 现代日期时间 API * 。
使用现代日期时间 API 的解决方案:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
System.out.println(DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH).format(LocalDate.of(2015, 6, 9)));
// Alternatively
System.out.println(LocalDate.of(2015, 6, 9).getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH));
}
}
输出:
Tuesday
Tuesday
从Trail: Date Time 中了解有关现代日期时间 API * 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和您的 Android API 工作级别仍然不符合 Java-8,请检查 通过 desugaring和How to use ThreeTenABP in Android Project 可用的 Java 8+ APIs 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.