Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日历-每周第一天与实际最小值_Java_Calendar - Fatal编程技术网

Java日历-每周第一天与实际最小值

Java日历-每周第一天与实际最小值,java,calendar,Java,Calendar,我正在测试我们的一个日期管理框架,它应该重置一些字段(使用) 但是,如果是,请始终返回(1)作为。是虫子吗 : import java.util.*; 公共班机{ 公共静态void main(字符串[]args){ System.out.printf(“Java规范:%s%n”,System.getProperty(“Java.vm.specification.version”); System.out.printf(“Java版本:%s%n”,System.getProperty(“Java.

我正在测试我们的一个日期管理框架,它应该重置一些字段(使用)

但是,如果是,请始终返回(
1
)作为。是虫子吗

:

import java.util.*;
公共班机{
公共静态void main(字符串[]args){
System.out.printf(“Java规范:%s%n”,System.getProperty(“Java.vm.specification.version”);
System.out.printf(“Java版本:%s%n”,System.getProperty(“Java.specification.version”);
System.out.printf(“VM版本:%s%n”,System.getProperty(“java.VM.version”);
Calendar cal=Calendar.getInstance(TimeZone.getTimeZone(“UTC”));
int[]天={1,5,7};
用于(整数天:天){
校准设置时间单位为毫秒(0升);
cal.setFirstDayOfWeek(天);
System.out.printf(“预期的:%d,实际的:%d%n”,天,cal.getActualMinimum(日历。周中的天));
}
}
}
您应该使用cal.getFirstDayOfWeek()instand of cal.getActualMinimum(日历日/周)

因为 cal.getActualMinimum(Calendar.DAY\u OF_WEEK)将始终返回星期天查看java源代码中getActualMinimum(Calendar.DAY\u OF_WEEK)的实现

  public int getActualMinimum(int field) {
        if (field == DAY_OF_MONTH) {
            GregorianCalendar gc = getNormalizedCalendar();
            int year = gc.cdate.getNormalizedYear();
            if (year == gregorianCutoverYear || year == gregorianCutoverYearJulian) {
                long month1 = getFixedDateMonth1(gc.cdate, gc.calsys.getFixedDate(gc.cdate));
                BaseCalendar.Date d = getCalendarDate(month1);
                return d.getDayOfMonth();
            }
        }
        return getMinimum(field);
    }
最低要求是:-

   public int getMinimum(int field) {
        return MIN_VALUES[field];
    }
最小值数组定义为:-

 static final int MIN_VALUES[] = {
        BCE,            // ERA
        1,              // YEAR
        JANUARY,        // MONTH
        1,              // WEEK_OF_YEAR
        0,              // WEEK_OF_MONTH
        1,              // DAY_OF_MONTH
        1,              // DAY_OF_YEAR
        SUNDAY,         // DAY_OF_WEEK
        1,              // DAY_OF_WEEK_IN_MONTH
        AM,             // AM_PM
        0,              // HOUR
        0,              // HOUR_OF_DAY
        0,              // MINUTE
        0,              // SECOND
        0,              // MILLISECOND
        -13*ONE_HOUR,   // ZONE_OFFSET (UNIX compatibility)
        0               // DST_OFFSET
    };
您应该使用cal.getFirstDayOfWeek()instand of cal.getActualMinimum(日历日/周)

因为 cal.getActualMinimum(Calendar.DAY\u OF_WEEK)将始终返回星期天查看java源代码中getActualMinimum(Calendar.DAY\u OF_WEEK)的实现

  public int getActualMinimum(int field) {
        if (field == DAY_OF_MONTH) {
            GregorianCalendar gc = getNormalizedCalendar();
            int year = gc.cdate.getNormalizedYear();
            if (year == gregorianCutoverYear || year == gregorianCutoverYearJulian) {
                long month1 = getFixedDateMonth1(gc.cdate, gc.calsys.getFixedDate(gc.cdate));
                BaseCalendar.Date d = getCalendarDate(month1);
                return d.getDayOfMonth();
            }
        }
        return getMinimum(field);
    }
最低要求是:-

   public int getMinimum(int field) {
        return MIN_VALUES[field];
    }
最小值数组定义为:-

 static final int MIN_VALUES[] = {
        BCE,            // ERA
        1,              // YEAR
        JANUARY,        // MONTH
        1,              // WEEK_OF_YEAR
        0,              // WEEK_OF_MONTH
        1,              // DAY_OF_MONTH
        1,              // DAY_OF_YEAR
        SUNDAY,         // DAY_OF_WEEK
        1,              // DAY_OF_WEEK_IN_MONTH
        AM,             // AM_PM
        0,              // HOUR
        0,              // HOUR_OF_DAY
        0,              // MINUTE
        0,              // SECOND
        0,              // MILLISECOND
        -13*ONE_HOUR,   // ZONE_OFFSET (UNIX compatibility)
        0               // DST_OFFSET
    };
答案是正确的

问题和答案都使用过时的类。与最早版本的Java捆绑在一起的旧日期时间类已经被类所取代

标准定义 根据标准定义了一周,分别为1和7

您可以向
DayOfWeek
对象询问此1-7数字

int dayOfWeekNumber = DayOfWeek.WEDNESDAY.getValue();
但是不要在代码周围传递这个数字。相反,传递
DayOfWeek
对象以享受有效值的好处和保证

本地化定义 对于星期几、月周和年周字段的本地化定义,请使用类

转储到控制台

System.out.println ( "weekFields_US: " + weekFields_US + " | firstDayOfWeek: " + firstDayOfWeek );
System.out.println ( "localDate: " + localDate + " | dow: " + dow + " | ordinalNumberDayOfWeek: " + ordinalNumberDayOfWeek );
System.out.println ( "ordinalNumberDayOfWeek_SundayBasedWeek: " + ordinalNumberDayOfWeek_SundayBasedWeek );
weekFields_US:weekFields[星期日,1]|星期一:星期日

定义你自己的周变化 我建议坚持指定对象来定义周。但如果你坚持,你可以定义你自己的一周变化。调用并指定(a)一周的第一天,以及(b)定义一年的第一周或一个月的第一周的最小天数

首先,为了进行比较,使用类中包含的标准ISO 8601定义获取星期几

转储到控制台

System.out.println ( "weekFields_US: " + weekFields_US + " | firstDayOfWeek: " + firstDayOfWeek );
System.out.println ( "localDate: " + localDate + " | dow: " + dow + " | ordinalNumberDayOfWeek: " + ordinalNumberDayOfWeek );
System.out.println ( "ordinalNumberDayOfWeek_SundayBasedWeek: " + ordinalNumberDayOfWeek_SundayBasedWeek );
本地日期:2016-02-03道琼斯工业平均指数:周三星期几:3

现在切换到定义我们自己的对象,再次询问星期几。上面我们看到了
3
,因为2016年2月3日是星期三,所以星期一-星期二-星期三是三。下面我们看到由于星期日、星期一、星期二、星期三的原因而产生的
4

// Define our own WeekFields to use in place of IsoFields.
WeekFields weekFields_SUNDAY_1 = WeekFields.of ( DayOfWeek.SUNDAY , 1 );
int ordinalNumberDayOfWeek_SundayBasedWeek = localDate.get ( weekFields_SUNDAY_1.dayOfWeek () );
转储到控制台

System.out.println ( "weekFields_US: " + weekFields_US + " | firstDayOfWeek: " + firstDayOfWeek );
System.out.println ( "localDate: " + localDate + " | dow: " + dow + " | ordinalNumberDayOfWeek: " + ordinalNumberDayOfWeek );
System.out.println ( "ordinalNumberDayOfWeek_SundayBasedWeek: " + ordinalNumberDayOfWeek_SundayBasedWeek );
星期日星期日星期几:4

(基于JodaStephen的示例)


见类似问题


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类。Hibernate5和JPA2.2支持java.time

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • 带来了一些小功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • Android(26+)的更高版本捆绑了java.time类的实现
    • 对于早期的Android(

      问题和答案都使用过时的类,与最早版本的Java捆绑在一起的旧日期时间类已经被类所取代

      标准定义 根据标准定义了一周,分别为1和7

      您可以向
      DayOfWeek
      对象询问此1-7数字

      int dayOfWeekNumber = DayOfWeek.WEDNESDAY.getValue();
      
      但是不要在代码中传递这个数字,而是传递
      DayOfWeek
      对象以享受有效值的好处和保证

      本地化定义 对于星期几、月周和年周字段的本地化定义,请使用类

      转储到控制台

      System.out.println ( "weekFields_US: " + weekFields_US + " | firstDayOfWeek: " + firstDayOfWeek );
      
      System.out.println ( "localDate: " + localDate + " | dow: " + dow + " | ordinalNumberDayOfWeek: " + ordinalNumberDayOfWeek );
      
      System.out.println ( "ordinalNumberDayOfWeek_SundayBasedWeek: " + ordinalNumberDayOfWeek_SundayBasedWeek );
      
      weekFields_US:weekFields[星期日,1]|星期一:星期日

      定义你自己的周变化 我建议坚持指定对象来定义一周。但是如果你坚持,你可以定义你自己的一周变化。调用并指定(a)一周的第一天,以及(b)定义一年中第一周或一个月的第一周的最小天数

      首先,为了进行比较,使用类中包含的标准ISO 8601定义获取星期几

      转储到控制台

      System.out.println ( "weekFields_US: " + weekFields_US + " | firstDayOfWeek: " + firstDayOfWeek );
      
      System.out.println ( "localDate: " + localDate + " | dow: " + dow + " | ordinalNumberDayOfWeek: " + ordinalNumberDayOfWeek );
      
      System.out.println ( "ordinalNumberDayOfWeek_SundayBasedWeek: " + ordinalNumberDayOfWeek_SundayBasedWeek );
      
      本地日期:2016-02-03道琼斯工业平均指数:周三星期几:3

      现在切换到定义我们自己的对象,再次询问星期几编号。上面我们看到了
      3
      ,因为2016年2月3日是星期三,所以星期一-星期二-星期三呈现为3。下面我们看到
      4
      ,因为星期天-星期一-星期三

      // Define our own WeekFields to use in place of IsoFields.
      WeekFields weekFields_SUNDAY_1 = WeekFields.of ( DayOfWeek.SUNDAY , 1 );
      int ordinalNumberDayOfWeek_SundayBasedWeek = localDate.get ( weekFields_SUNDAY_1.dayOfWeek () );
      
      转储到控制台

      System.out.println ( "weekFields_US: " + weekFields_US + " | firstDayOfWeek: " + firstDayOfWeek );
      
      System.out.println ( "localDate: " + localDate + " | dow: " + dow + " | ordinalNumberDayOfWeek: " + ordinalNumberDayOfWeek );
      
      System.out.println ( "ordinalNumberDayOfWeek_SundayBasedWeek: " + ordinalNumberDayOfWeek_SundayBasedWeek );
      
      星期日星期日星期几:4

      (基于JodaStephen的示例)