【问题标题】:get number of the week in the year where first day of the week is Sunday获取一周的第一天是星期日的一年中的周数
【发布时间】:2016-06-05 15:20:12
【问题描述】:

我正在尝试获取日期的周数,在我的国家/地区,该周从星期日开始,因此 2016 年 6 月 5 日的周数为 23,但它返回 22,因为 JAVA 中的 ISO 周从星期一,我使用了以下方法,但它不起作用

 mCalendar = Calendar.getInstance(); 
  int weekNum = mCalendar.get(Calendar.WEEK_OF_YEAR); //returns 22 I need 23 
 // I have tried the following method but it has no effect 
 mCalendar.setFirstDayOfWeek(Calendar.SUNDAY); 

请注意,我不能使用 Time Class 我只能使用 Java 7

【问题讨论】:

  • 仅供参考,Java 8 及更高版本中内置的大部分 java.time 功能在ThreeTen-Extra 中向后移植到 Java 6 和 7。在ThreeTenABP进一步适配Android。

标签: java date


【解决方案1】:

Java 8 版本完整答案:

public<T extends Temporal> long getWeekNumber(T tObj) {
    DayOfWeek firstDayOfWeek  = DayOfWeek.SUNDAY; // set your
    Temporal firstDayOfThisYear = tObj.with(TemporalAdjusters.firstDayOfYear());
    Temporal firstDayOfWeekInMonth = firstDayOfThisYear
             .with(TemporalAdjusters.dayOfWeekInMonth(1, firstDayOfWeek));
    return ChronoUnit.WEEKS.between(tObj, firstDayOfWeekInMonth);
}

参数可以是任何Temporal 类型,甚至是Temporal 本身。

【讨论】:

  • 来自Temporal的文档:这个接口是框架级别的接口,不应该在应用程序代码中广泛使用。相反,应用程序应该创建和传递具体类型的实例,例如 LocalDate 不过,这个答案仍然比其他任何一个都好。
  • @OleV.V.,同意,所以我改变了答案,以更节省的方式适应这种情况。谢谢!
【解决方案2】:

我不知道你来自哪里,但 Java 有一个很棒的日历,它允许以下内容:

Calendar calendar = Calendar.getInstance(Locale.TRADITIONAL_CHINESE);
int weekNumber = calendar.get(Calendar.WEEK_OF_YEAR);
System.out.println("Number of week: " + weekNumber);
// produces 24

Calendar calendar = Calendar.getInstance(Locale.UK);
int weekNumber = calendar.get(Calendar.WEEK_OF_YEAR);
System.out.println("Number of week: " + weekNumber);
// produces 22

您可以使用语言环境常量来指定您的位置,我认为您会得到正确的周数。

编辑: 现在我在您的代码中看到了失败。请注意,Java 从顶部到您的代码的按钮都是有效的:

Calendar calendar = Calendar.getInstance();
// First set the first day of the week ...
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
// ... and than you could ask the calendar for the week
int weekNumber = calendar.get(Calendar.WEEK_OF_YEAR);
// will produce 23
System.out.println("Number of week: " + weekNumber);

【讨论】:

  • 我试过这个选项,但它不起作用我需要 23
  • 对不起,我看到我的错误有点晚了。我编辑了我的帖子,以便回答您的​​问题。
【解决方案3】:

我不知道你来自哪里。 我是法国人,这样可以完美地工作:

Calendar mCalendar = Calendar.getInstance(Locale.FRANCE);
mCalendar.setFirstDayOfWeek(Calendar.SUNDAY);
int weekNum = mCalendar.get(Calendar.WEEK_OF_YEAR);
System.out.println(weekNum); // --> 23

【讨论】:

    【解决方案4】:
    1. 获取当前时刻。
      请参阅此问题:How to initialize a variable of type date in Java?
    2. 确定一年中的第一个星期日。
      在这个问题中彻底处理:How to get all the Sunday's of a year
    3. 计算第一个星期日和当前时刻之间的周数。
      查看问题:Get the number of weeks between two Dates

    【讨论】:

      【解决方案5】:

      我刚刚想出了如何更改它 你需要设置两件事 1-一周的第一天 2-一周中最少的一天

      setFirstDayOfWeek(Calendar.SUNDAY);    
      setMinimalDaysInFirstWeek(7);
      

      这将告诉日历将第一天设为星期日,并且每周最少有 7 天

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多