【发布时间】:2014-04-28 18:08:46
【问题描述】:
我在 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---
【问题讨论】:
-
除此之外,在我看来,您所做的解析比您需要的要多。解析常量没有意义 - 只需调用构造函数即可。而对于
dateTemp,为什么不存储解析值而不是result[12]?不过,result[12]中的内容还不是很清楚 - 如果您提供一个简短但完整的程序来演示问题,这将非常有帮助。 -
对不起,不清楚的问题。 result[12] 是从查询中检索到的日期。我正在考虑一个解决方案,并且这段代码适用于日期差异:我正在计算查询的实际日期和之前计算的日期之间的差异。如果差值超过 1 天,则一周内有超过 1 天未计算...希望清楚...
-
这不是一个简短但完整的程序,是吗?我想要一些可以复制、粘贴到新文本文档中、编译和运行的东西。 (也花时间好好格式化一下……)
-
不,我不能只是复制粘贴到一个空文件中然后编译。它没有声明一个类或
main方法。虽然我可以完成所有这些工作(并修复缩进),但您需要尽可能简单地回答问题。 -
最后,如果您使用的是 Joda Time,为什么还要使用
SimpleDateFormat?首选DateTimeFormatter。
标签: java datetime recursion jodatime