我在2个日期之间从查询中检索了更多数据。日期是当月第一周的第一天,以及当月最后一周的最后一天。
确切地说,例如,当前月份的范围日期保持不变(在语言环境中,星期一是一周的第一天):
from 2014-03-31 to 2014-05-04 (35 days)
问题在于数据检索仅是工作日(例如:每周5天),但我必须计算7天的整个星期,因为每7天我都会在ArrayList中写入数据。
我正在构建一个代码来做到这一点,但无法正常工作,因为该代码仅计算33天,而不是35天,而且我不明白为什么...
这是我的代码:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date firstdayoftheweek = new Date();
try
{
firstdayoftheweek = formatter.parse("2014-03-31");
}
catch(ParseException e){}
String dateTemp = null;
for ( String[] result : results) // cicle for every query's row
{
count_row++;
if (count_row == 1)
{
Date dtActualDayQuery = new Date();
try
{
dtWd = formatter.parse(result[12]);
}
catch(ParseException e){}
int diffDays = Days.daysBetween(new DateTime(firstdayoftheweek), new DateTime(dtActualDayQuery)).getDays();
if (diffDays > 1)
{
count_row = (count_row + diffDays) -1;
}
}
else
{
Date dtprevious = new Date();
Date dtActualDayQuery = new Date();
try
{
dtprevious = formatter.parse(dateTemp);
dtActualDayQuery = formatter.parse(result[12]);
}
catch(ParseException e){}
int diffDays = Days.daysBetween(new DateTime(dtprevious), new DateTime(dtActualDayQuery)).getDays();
if (diffDays > 1)
{
count_row = (count_row + diffDays) -1;
}
}
dateTemp = result[12]; // Save the date for next comparison
// Do something every day of the week
if (((count_row) % 7) == 0)
{
// Do something every 7 days
}
}
不正确,我知道...但是我想不出正确的解决方案...
谢谢!!
编辑:
我写了一个示例代码:
package test;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.Days;
public class Test
{
public static void main(String[] args)
{
int count = 0;
String[] month = {"2014-03-31", "2014-04-01", "2014-04-02", "2014-04-03", "2014-04-04",
"2014-04-07", "2014-04-08", "2014-04-09", "2014-04-10", "2014-04-11",
"2014-04-14", "2014-04-15", "2014-04-16", "2014-04-17", "2014-04-18",
"2014-04-21", "2014-04-22", "2014-04-23", "2014-04-24", "2014-04-25",
"2014-04-28", "2014-04-29", "2014-04-30", "2014-05-01", "2014-05-02"};
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date dt_1day_absolute = new Date();
try
{
dt_1day_absolute = formatter.parse("2014-03-31");
}
catch (ParseException e) {}
String dateTemp = null;
for (int i = 0; i < month.length; i++)
{
count++;
if (count == 1)
{
Date dtFromVector = new Date();
try
{
dtFromVector = formatter.parse(month[i]);
} catch (ParseException e){}
int diffDays = Days.daysBetween(new DateTime(dt_1day_absolute), new DateTime(dtFromVector)).getDays();
if (diffDays > 1)
{
count = (count + diffDays) - 1;
}
}
else
{
Date dtprev = new Date();
Date dtaft = new Date();
try
{
dtprev = formatter.parse(dateTemp);
dtaft = formatter.parse(month[i]);
}
catch (ParseException e) {}
int diffDays = Days.daysBetween(new DateTime(dtprev), new DateTime(dtaft)).getDays();
if (diffDays > 1)
{
count = (count + diffDays) - 1;
}
}
dateTemp = month[i];
System.out.println("Num Day: " + String.valueOf(count));
System.out.println("Date: " + month[i]);
if (((count) % 7) == 0)
{
System.out.println("---End week---");
System.out.println("");
}
}
}
}
我得到这个结果:
Num Day: 1
Date: 2014-03-31
Num Day: 2
Date: 2014-04-01
Num Day: 3
Date: 2014-04-02
Num Day: 4
Date: 2014-04-03
Num Day: 5
Date: 2014-04-04
Num Day: 8
Date: 2014-04-07
Num Day: 9
Date: 2014-04-08
Num Day: 10
Date: 2014-04-09
Num Day: 11
Date: 2014-04-10
Num Day: 12
Date: 2014-04-11
Num Day: 15
Date: 2014-04-14
Num Day: 16
Date: 2014-04-15
Num Day: 17
Date: 2014-04-16
Num Day: 18
Date: 2014-04-17
Num Day: 19
Date: 2014-04-18
Num Day: 22
Date: 2014-04-21
Num Day: 23
Date: 2014-04-22
Num Day: 24
Date: 2014-04-23
Num Day: 25
Date: 2014-04-24
Num Day: 26
Date: 2014-04-25
Num Day: 29
Date: 2014-04-28
Num Day: 30
Date: 2014-04-29
Num Day: 31
Date: 2014-04-30
Num Day: 32
Date: 2014-05-01
Num Day: 33
Date: 2014-05-02
我期望这个结果:
Num Day: 1
Date: 2014-03-31
Num Day: 2
Date: 2014-04-01
Num Day: 3
Date: 2014-04-02
Num Day: 4
Date: 2014-04-03
Num Day: 5
Date: 2014-04-04
Num Day: 6
not exists
Num Day: 7
not exists
---End week---
Num Day: 8
Date: 2014-04-07
Num Day: 9
Date: 2014-04-08
Num Day: 10
Date: 2014-04-09
Num Day: 11
Date: 2014-04-10
Num Day: 12
Date: 2014-04-11
Num Day: 13
not exists
Num Day: 14
not exists
---End week---
Num Day: 15
Date: 2014-04-14
Num Day: 16
Date: 2014-04-15
Num Day: 17
Date: 2014-04-16
Num Day: 18
Date: 2014-04-17
Num Day: 19
Date: 2014-04-18
Num Day: 20
not exists
Num Day: 21
not exists
---End week---
Num Day: 22
Date: 2014-04-21
Num Day: 23
Date: 2014-04-22
Num Day: 24
Date: 2014-04-23
Num Day: 25
Date: 2014-04-24
Num Day: 26
Date: 2014-04-25
Num Day: 27
not exists
Num Day: 28
not exists
---End week---
Num Day: 29
Date: 2014-04-28
Num Day: 30
Date: 2014-04-29
Num Day: 31
Date: 2014-04-30
Num Day: 32
Date: 2014-05-01
Num Day: 33
Date: 2014-05-02
Num Day: 34
not exists
Num Day: 35
not exists
---End week---
最佳答案
下一个解决方案应该会有所帮助:
final DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd"); // like 'SimleDateFormat'
final List<String> month = Arrays.asList("2014-03-31", "2014-04-01", "2014-04-02", "2014-04-03", "2014-04-04",
"2014-04-07", "2014-04-08", "2014-04-09", "2014-04-10", "2014-04-11",
"2014-04-14", "2014-04-15", "2014-04-16", "2014-04-17", "2014-04-18",
"2014-04-21", "2014-04-22", "2014-04-23", "2014-04-24", "2014-04-25",
"2014-04-28", "2014-04-29", "2014-04-30", "2014-05-01", "2014-05-02");
final DateTime lastDate = dtf.parseDateTime(month.get(month.size() - 1)); // last date in 'month' array
final MutableDateTime dateIterator = new MutableDateTime(dtf.parseDateTime(month.get(0))); // first date in 'month' array
int count = 0;
for (;;dateIterator.addDays(1)) // start iteration day by day
{
count++;
final String dateAsString = dtf.print(dateIterator); // convert iterator to String
if (month.contains(dateAsString)) // 'month' array contains current date
{
System.out.println("Date: " + dateAsString);
}
else
{
if (dateIterator.getDayOfWeek() == 1 // current date is first day of week but record is absent in db
&& dateIterator.isAfter(lastDate)) // and all records from db are processed
// so let's break for-loop
{
break; // break for-loop
}
System.out.println("not exists");
}
System.out.println("Num Day: " + String.valueOf(count));
}