受到以下帖子的启发
我需要一个返回月份中给定日期的序数位置的函数,例如:
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) {
...
}
答案 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