为什么新的java.text.simpleDataFormat(“EEEE”)格式(new java.util.Date(2015,6,9))返回的是错误的一周中的哪一天?
我想从为什么新的java.text.simpleDataFormat(“EEEE”)格式(new java.util.Date(2015,6,9))返回的是错误的一周中的哪一天?,java,date,simpledateformat,Java,Date,Simpledateformat,我想从Java中的日期获取一周中的某一天。为什么星期五是星期二,而星期五又是星期五呢 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开始,因此如果您谈论的是6月9日,您可能想要新的日期(115,5,9)(之所以使用115是因为y
Java
中的日期获取一周中的某一天。为什么星期五是星期二,而星期五又是星期五呢
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
开始,因此如果您谈论的是6月9日,您可能想要新的日期(115,5,9)
(之所以使用115
是因为year
参数是“自1900年起”)
发件人:
参数:
年份
-减去1900的年份
month
-0-11之间的月份
日期
-月1日至31日之间的一天
(我的重点。)
您说过要将其作为一个单行程序来执行。在Java 8中,您可以执行以下操作:
String day = LocalDate.of(2015, 6, 9).format(DateTimeFormatter.ofPattern("EEEE"));
它使用和。java.time
旧式日期时间API(java.util
日期时间类型及其格式API,SimpleDataFormat
)已过时且容易出错。建议完全停止使用它,并切换到java.time
,即*
使用现代日期时间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
输出:
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
从了解有关*的更多信息
*无论出于何种原因,如果您必须坚持使用Java 6或Java 7,您可以使用哪个backport将大部分Java.time功能移植到Java 6和7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。
@BrianTHannan classjava.util.Date
设计得很糟糕。@BrianTHannan如果您使用的是java 8,请忘记java.util.Date
,使用包java.time
中的新API。否则,请使用java.util.Calendar
而不是不推荐的构造函数。尽量避免使用java.util.Date
如果你可能的话。@Peant我想说,对于一个在20世纪90年代设计的类(两位数的年份??那时每个人都知道Y2K问题!)来说,年份减去1900这个事实是一个更糟糕的设计错误。@BrianTHannan:但是如果你听从Jesper的建议(他通常不会让你犯错)使用java.time
,我想我刚才添加到答案中的一行代码就可以了。我想我很好奇为什么你遇到这个问题的第一个倾向是在stackoverflow上发帖,而不是去java.util.Date javadocs阅读构造函数文档。你需要知道的一切都在那里。Rel特级:。