代码之家  ›  专栏  ›  技术社区  ›  Matthew Layton

Java8DateAPI-获取月份中某一天的顺序位置

  •  7
  • Matthew Layton  · 技术社区  · 6 年前

    受到以下帖子的启发

    我需要一个函数来返回一个月中给定日期的序号位置,例如:

    01/01/1970 = 1. 因为它是 1970年1月的星期四

    02/01/1970 = 1. 因为它是 第一

    19/01/1970 = 3. 因为它是 第三 1970年1月的星期一

    31/01/1970 = 5. 因为它是 第五 1970年1月的星期六

    理想情况下,我想要一个具有此签名的函数:

    public int getOrdinalPosition(TemporalAccessor temporal) {
        ...
    }
    
    4 回复  |  直到 4 年前
        1
  •  4
  •   rzwitserloot    6 年前

    这就是你在这里所需要的。

    相关方法:for循环、计数器和。。这个 minusDays(7) 方法,以及 getMonth() .

        2
  •  3
  •   SedJ601    6 年前

    ChronoField.ALIGNED_WEEK_OF_MONTH

    你可以用 LocalDate.get() ChronoField.ALIGNED\u周\u月 .

    import java.time.LocalDate;
    import java.time.temporal.ChronoField;
    import java.time.temporal.TemporalAccessor;
    
    /**
     *
     * @author Sedrick
     */
    public class JavaApplication19 {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            LocalDate localDate1 = LocalDate.of(1970, 01, 01);
            LocalDate localDate2 = LocalDate.of(1970, 02, 01);
            LocalDate localDate3 = LocalDate.of(1970, 01, 19);
            LocalDate localDate4 = LocalDate.of(1970, 01, 31);
    
    
            System.out.println(localDate1.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
            System.out.println(localDate2.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
            System.out.println(localDate3.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
            System.out.println(localDate4.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
    
            System.out.println(getOrdinalPosition(localDate4));
        }
    
        static public int getOrdinalPosition(TemporalAccessor temporal) {
            return LocalDate.from(temporal).get(ChronoField.ALIGNED_WEEK_OF_MONTH);
        }
    }
    

    输出:

    run:
    1
    1
    3
    5
    5
    BUILD SUCCESSFUL (total time: 0 seconds)
    
        3
  •  2
  •   Pankaj Singhal    6 年前

    你需要的是 ChronoField.ALIGNED_WEEK_OF_MONTH

    LocalDate.of(1970,1,1).get(ChronoField.ALIGNED_WEEK_OF_MONTH)      //1
    LocalDate.of(1970,1,2).get(ChronoField.ALIGNED_WEEK_OF_MONTH)      //1
    LocalDate.of(1970,1,19).get(ChronoField.ALIGNED_WEEK_OF_MONTH)     //3
    LocalDate.of(1970,1,31).get(ChronoField.ALIGNED_WEEK_OF_MONTH)     //5
    
        4
  •  2
  •   Matthew Layton    6 年前

    这似乎有效。。。

    public int getOrdinalPosition(TemporalAccessor temporal) {
        return ((LocalDate.from(temporal).getDayOfMonth() - 1) / 7) + 1;
    }
    
    推荐文章