我想知道一周中的哪一天是当天,并查看 SimpleDateFormat 类,我认为“F”是我需要的。所以我写了一个小测试:
System.out.println(new SimpleDateFormat("F").format(new Date()));
今天是星期三,我希望得到 3 作为输出。相反,我得到 2。
由于英语不是我的母语,我是否误解了格式的含义?
我想知道一周中的哪一天是当天,并查看 SimpleDateFormat 类,我认为“F”是我需要的。所以我写了一个小测试:
System.out.println(new SimpleDateFormat("F").format(new Date()));
今天是星期三,我希望得到 3 作为输出。相反,我得到 2。
由于英语不是我的母语,我是否误解了格式的含义?
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);
今天是本月的第二个星期三。
java.util.Calendar/.Date 和相关的类是一个令人困惑的混乱,因为你已经学会了艰难的方式。从零开始计算月份数字和星期几是那些旧课程中许多糟糕的设计选择之一。
Java 8 和后来的java.time框架已经取代了这些旧类。新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继任者,在概念上相似但重新架构。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅教程。
DayOfWeek
如果您想要一个符合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.
星期几的索引从 0 开始,而不是 1。
F -> Day of week in month(1-5)
今天是 -09/01/2013(dd/MM/yyyy)
这是一周中的第 2 次,所以它打印了 2。
如果您尝试使用,16/01/2013
那么它将打印 3。
F = 月中的星期
几 1day到7day,它将打印1。
从 8 天到14天,它会打印2。
从 15 天到21 天,它会打印3。
22day到28day会打印4和
29day到31day会打印5。
只需使用此方法即可。
public String day(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("EEEEEEEEE", new Locale("tr", "TR"));
return sdf.format(date);
}