11

我想知道一周中的哪一天是当天,并查看 SimpleDateFormat 类,我认为“F”是我需要的。所以我写了一个小测试:

System.out.println(new SimpleDateFormat("F").format(new Date()));

今天是星期三,我希望得到 3 作为输出。相反,我得到 2。

由于英语不是我的母语,我是否误解了格式的含义?

4

7 回答 7

23

F- 一个月的星期几

E- 星期天名称

try u- 星期几(1 = 星期一,...,7 = 星期日)

请注意,'u' 是从 Java 7 开始的,但如果您只需要一周中的天数,请使用 Calendar

    Calendar c = Calendar.getInstance();
   System.out.println(c.get(Calendar.DAY_OF_WEEK));

您可以通过更改区域设置或直接更改为一周的第一天

    c.setFirstDayOfWeek(Calendar.SUNDAY);
于 2013-01-09T09:36:50.420 回答
18

今天是本月的第二个星期三。

于 2013-01-09T09:35:26.450 回答
2

java.util.Calendar/.Date 和相关的类是一个令人困惑的混乱,因为你已经学会了艰难的方式。从零开始计算月份数字和星期几是那些旧课程中许多糟糕的设计选择之一。

java.time

Java 8 和后来的java.time框架已经取代了这些旧类。新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继任者,在概念上相似但重新架构。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅教程

DayOfWeek

对于星期几,使用命名良好的enumDayOfWeek

如果您想要一个符合ISO 8601的星期的整数,其中星期一 = 1 和星期日 = 7,您可以从DayOfWeek.

转换

如果以 java.util.Calendar 对象开头,则转换为 java.time。

An是UTCInstant时间线上的时刻。

Instant instant = myJavaUtilCalendarObject.toInstant();

应用时区以获取日期以获取星期几。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
DayOfWeek dayOfWeek = zdt.getDayOfWeek();

请注意,时区对于确定日期至关重要,因此也是星期几。世界各地的日期不一样。例如,巴黎的新一天比蒙特利尔更早。

星期几

现在我们有了 java.time 和 Java 中内置的这个枚举,我建议你自由地传递这些枚举实例,而不是一个幻数

但是,如果您坚持使用整数,请询问DayOfWeek.

int dayOfWeekNumber = dayOfWeek.getValue();

星期几的字符串

该枚举为星期几的名称生成一个本地化的字符串。

String output = dayOfWeek.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );  // Or Locale.ENGLISH.
于 2015-12-17T20:31:45.073 回答
1

星期几的索引从 0 开始,而不是 1。

于 2013-01-09T09:30:47.590 回答
1
F -> Day of week in month(1-5)

今天是 -09/01/2013(dd/MM/yyyy)这是一周中的第 2 次,所以它打印了 2。

如果您尝试使用,16/01/2013那么它将打印 3。

于 2013-01-09T09:32:46.647 回答
1

F = 月中的星期
几 1day7day,它将打印1
从 8 天到14,它会打印2
从 15 天21 天,它会打印3
22day28day会打印4
29day31day会打印5

于 2020-02-29T15:34:07.507 回答
0

只需使用此方法即可。

public String day(Date date) {
    SimpleDateFormat sdf = new SimpleDateFormat("EEEEEEEEE", new Locale("tr", "TR"));
    return sdf.format(date);
}
于 2013-11-22T10:26:56.163 回答