查找给定范围内所有之前的星期二?

问题描述 投票:0回答:2

我在我的Android项目中需要做的是找到过去三个月的所有周二并将它们放入一个字符串数组中。看来

Calendar Class
SimpleDateFormat
都不起作用。

例如,今天是星期二,所以从今天开始,我需要返回 2013_8_13,数组中的下一个是 2013_8_6,然后是 2013_7_30,依此类推。我对

Calendar Class
SimpleDateFormat
有错吗?如果是这样,您能给我一个如何完成的想法吗?

java android
2个回答
1
投票

编辑:更新答案以返回到某一天而不是返回到特定天数。还将 String 数组更改为 ArrayList

ArrayList<String> tuesdayArrayList = new ArrayList<String>();

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_M_d");

Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK);

Date date = new Date();

Date cutoffDate;
int cutoffYear = 2013;
int cutoffMonth = Calendar.JUNE;
int cutoffDayOfMonth = 25;
cutoffDate = new GregorianCalendar(cutoffYear, cutoffMonth, cutoffDayOfMonth).getTime();

while (day != Calendar.TUESDAY) {
    calendar.add(Calendar.DATE, 1);
    day = calendar.get(Calendar.DAY_OF_WEEK);
}

int i = 0;
while (date.after(cutoffDate)) {
    calendar.add(Calendar.DATE, -7);
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    date = new GregorianCalendar(year, month, dayOfMonth).getTime();
    tuesdayArrayList.add(dateFormat.format(date));
    Log.d("myTag: ", tuesdayArrayList.get(i));
    i++;
}

0
投票

避免遗留日期时间类

您正在使用有严重缺陷的日期时间类,这些类现在已成为遗留问题,已被 Java 8 及更高版本中内置的现代 java.time 类所取代。

java.time.LocalDate

要表示仅日期值,没有时间、时区或相对于 UTC 的偏移量,请使用

LocalDate
类。

ZoneId z = ZoneId.systemDefault() ;
LocalDate today = LocalDate.now( z ) ;

时光倒流三个月。

LocalDate threeMonthsAgo = today.minusMonths( 3 ) ;

获取可追溯到该日期的日期流。筛选星期二的这些日期。收集到一个列表中。

List < LocalDate > tuesdays =
        threeMonthsAgo
                .datesUntil ( today )
                .filter ( date -> date.getDayOfWeek ( ).equals ( DayOfWeek.TUESDAY ) )
                .collect ( Collectors.toUnmodifiableList ( ) );       // Use .toList() in more recent Java

转储到控制台。

for ( LocalDate date : tuesdays )
{
    System.out.println ( date + " = " + date.getDayOfWeek ( ) );
}

请参阅此 在 Ideone.com 上运行的代码

2024-10-08 = TUESDAY
2024-10-15 = TUESDAY
2024-10-22 = TUESDAY
2024-10-29 = TUESDAY
2024-11-05 = TUESDAY
2024-11-12 = TUESDAY
2024-11-19 = TUESDAY
2024-11-26 = TUESDAY
2024-12-03 = TUESDAY
2024-12-10 = TUESDAY
2024-12-17 = TUESDAY
2024-12-24 = TUESDAY
2024-12-31 = TUESDAY
© www.soinside.com 2019 - 2024. All rights reserved.