SimpleDateformat和“一周中的某一天”(F)

时间:2013-01-09 09:28:09

标签: java

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

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

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

由于英语不是我的母语,我是否错过理解格式的含义?

7 个答案:

答案 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.time

这些旧类已在Java 8及更高版本的java.time框架中取代。新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅Tutorial

DayOfWeek

对于星期几,请使用名称良好的DayOfWeek enum

如果你想要一个符合ISO 8601的星期几的整数,其中星期一= 1和星期日= 7,你可以从DayOfWeek的实例中提取它。

转换

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

InstantUTC中时间轴上的一个时刻。

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