我想知道当天的哪一天是当天,看着SimpleDateFormat课,我认为“F”是我需要的。所以我写了一个小测试:
System.out.println(new SimpleDateFormat("F").format(new Date()));
今天是星期三,我希望得到3作为输出。相反,我得到了2。
由于英语不是我的母语,我是否错过理解格式的含义?
答案 0 :(得分:22)
F
- 每月的某一天
E
- 周中的日期名称
尝试u
- 星期数(1 =星期一,...,7 =星期日)
请注意' u'从Java 7开始,但如果您只需要一周中的天数,那么请使用日历
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_WEEK));
您可以通过更改区域设置或直接更改
来更改一周的第一天 c.setFirstDayOfWeek(Calendar.SUNDAY);
答案 1 :(得分:14)
今天是本月的第二个星期三。
答案 2 :(得分:2)
java.util.Calendar / .Date和相关类是一个令人困惑的混乱,因为你已经学到了很多困难。从零开始计算月数和星期数是这些旧类中许多糟糕的设计选择之一。
这些旧类已在Java 8及更高版本的java.time框架中取代。新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅Tutorial。
DayOfWeek
如果你想要一个符合ISO 8601的星期几的整数,其中星期一= 1和星期日= 7,你可以从DayOfWeek
的实例中提取它。
如果以java.util.Calendar对象开头,请转换为java.time。
Instant
是UTC中时间轴上的一个时刻。
Instant instant = myJavaUtilCalendarObject.toInstant();
申请时区以获取日期以获得星期几。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
DayOfWeek dayOfWeek = zdt.getDayOfWeek();
请注意,时区对于确定日期至关重要,因此也就是一周中的某一天。世界各地的日期不一样。例如,巴黎的新日早些时候比蒙特利尔更新。
既然我们已经将java.time和这个枚举内置到Java中,我建议你自由地传递那些枚举实例而不是magic number。
但如果你坚持一个整数,请问DayOfWeek
。
int dayOfWeekNumber = dayOfWeek.getValue();
该枚举为星期几的名称生成本地化字符串。
String output = dayOfWeek.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ); // Or Locale.ENGLISH.
答案 3 :(得分:1)
星期几的索引从0开始,而不是1。
答案 4 :(得分:1)
F -> Day of week in month(1-5)
今天是 - 09/01/2013(dd/MM/yyyy)
,它在一周内排名第二,所以打印了2。
如果您尝试使用16/01/2013
,则会打印3。
答案 5 :(得分:0)
只需使用此方法即可。
public String day(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("EEEEEEEEE", new Locale("tr", "TR"));
return sdf.format(date);
}
答案 6 :(得分:0)
F =每月的星期几
1天到 7天,它将打印 1 。
8天到 14天,它将打印 2 。
15天到 21天,它将打印 3 。
22天到 28天,它将打印 4 和
29天至 31天,它将打印 5 。