Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么新的java.text.simpleDataFormat(“EEEE”)格式(new java.util.Date(2015,6,9))返回的是错误的一周中的哪一天?_Java_Date_Simpledateformat - Fatal编程技术网

为什么新的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 class
java.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特级:。