Java 8 Date API-获取月份中一天的序数位置

时间:2019-01-06 02:18:52

标签: java java-8 java-date

受到以下帖子的启发

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

  

01/01/1970 = 1 因为这是1970年1月的第一星期四

     

02/01/1970 = 1 因为这是1970年1月的第一个星期五

     

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

     

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

我尝试了什么? -没什么...我什至不知道从哪里开始; Java 8日期/时间API对我来说还很新。

理想情况下,我想要具有此签名的功能:

public int getOrdinalPosition(TemporalAccessor temporal) {
    ...
}

4 个答案:

答案 0 :(得分:4)

好吧,1970年1月19日。从中减去7天,仍然是一月。再次减去7天,..仍在一月。第4次减去7天,..哦,它不再是一月了。您第四次删除7天,它就不再是正确的月份。

这就是您所需要的。

相关方法:for循环,计数器和.. import pygeoip gi = pygeoip.GeoIP('GeoIP.dat') Country = gi.country_code_by_name('64.233.161.99') print(Country) 方法以及minusDays(7)

答案 1 :(得分:3)

ChronoField.ALIGNED_WEEK_OF_MONTH

您可以使用LocalDate.get()ChronoField.ALIGNED_WEEK_OF_MONTH

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)

答案 2 :(得分:2)

这似乎可行...

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

答案 3 :(得分:2)

您需要的是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