gpt4 book ai didi

android - 无法获取 Calendar.WEEK_OF_YEAR

转载 作者:IT王子 更新时间:2023-10-29 06:28:06 26 4
gpt4 key购买 nike

几天来我一直在努力让它发挥作用,但我已经筋疲力尽了。我想我只需要另一双眼睛来帮助我。

我将“条目”存储在数据库中,每个条目在输入时都有一个 Unix 时间戳。我有一个系统,用户可以在其中选择任何日期并查看同一周存储的条目。当我让用户使用 Calendar.setFirstDayOfWeek() 设置一周的自定义第一天时,问题就出现了。 我永远无法从数据库中获得正确的返回值,并将一周的第一天设置为星期日以外的其他日期(在本例中,我使用星期二)。

public void getEntries() {

/* Make sure temp Calendar has same first day */
temp = Calendar.getInstance();
temp.setFirstDayOfWeek(date.getFirstDayOfWeek());
/* Common date ranges in unix time */
long oneday = 86400000L;
long oneweek = 604800000L;
long onemonth = 2628000000L;
long oneyear = 31536000000L;
/* The custom date in unix time. For example, the user may have selected Dec. 1, 2012 */
long set_time = date.getTimeInMillis();
entries.clear();
dba.open();

/* This query gets entries within 1 week and 1 day of the user-set date just to be safe */
Cursor cc = dba.query("Date < " +(set_time+oneweek+oneday)+ " AND Date > " +(set_time-oneday-oneweek));
if(cc.moveToFirst()) do {
/* Set temp calendar to the timestamp of the entry in database */
long unix = cc.getLong(1);
temp.setTimeInMillis(unix);
System.out.println("Temp calendar set to "+temp.getTime().toGMTString()+ " fdow("+temp.getFirstDayOfWeek()+") week("+temp.get(Calendar.WEEK_OF_YEAR)+"), user calendar set to "+date.getTime().toGMTString()+" fdow("+date.getFirstDayOfWeek()+") week("+date.get(Calendar.WEEK_OF_YEAR)+")");
if(temp.get(Calendar.WEEK_OF_YEAR) == date.get(Calendar.WEEK_OF_YEAR)
&& temp.get(Calendar.YEAR) == date.get(Calendar.YEAR) )
/* Entry object is instantiated and added to ArrayList if WEEK_OF_YEAR in temp calendar matches WEEK_OF_YEAR in global calendar */
entries.add(createEntryFromCursor(cc));
} while(cc.moveToNext());

}

在我的测试中,我确实知道在 2012 年 11 月 30 日有一个条目。将一周的第一天设置为星期二(条目是在星期五),如果用户设置,这应该返回 1 个结果日期为 12 月 1 日,如果用户设置为 11 月 26 日(星期一)则没有结果。但是,我得到 1 个结果。怎么了?!

编辑

我仍然真的需要帮助!我已经用我当前的代码更新了上面的内容。我仍然得到奇怪的结果。例如,一周的第一天是星期一,我从 System.out 中获取:

12-09 11:46:38.465: I/System.out(15130): 临时日历设置为 2012 年 12 月 9 日 19:29:59 GMT fdow(2) 周(49),用户日历设置为2012 年 12 月 9 日 14:51:59 GMT fdow(2) 周(50)

这是说 2012 年 12 月 9 日出现在 2 个不同的 WEEK_OF_YEAR (49/50) 中,即使这两个日历的一周的第一天都等于 2。嗯..什么??

解决方案

我放弃获取 WEEK_OF_YEAR 并按照建议获取一周的开始和结束 Date

            // get rollback amt
temp.setTimeInMillis(set_time);
int rollback = 0;
int dayofweek = date.get(Calendar.DAY_OF_WEEK);
while(dayofweek != temp.getFirstDayOfWeek()) {
dayofweek--;
if(dayofweek == 0) dayofweek = 7;
rollback--;
}
int rollfwd = rollback + 6;

// get start bound
temp.setTimeInMillis(set_time);
temp.roll(Calendar.DAY_OF_YEAR, rollback);
temp.set(Calendar.HOUR_OF_DAY, 0);
temp.set(Calendar.MINUTE, 1);
Date start = temp.getTime();
// get end bound
temp.setTimeInMillis(set_time);
temp.roll(Calendar.DAY_OF_YEAR, rollfwd);
temp.set(Calendar.HOUR_OF_DAY, 23);
temp.set(Calendar.MINUTE, 59);
Date end = temp.getTime();

然后我可以检查条目的 Date 是否在这些之间:

if(entrydate.after(start) && entrydate.before(end))

最佳答案

你能用SimpleDateFormat吗?在 android 中获取 week_of_year 并验证查询用户选择日期的条件。

第 1 步:获取用户选择周的选项。例如:27

第 2 步:获取一周的开始和结束。第 27 周开始到第 27 周结束。

第 3 步:使用这两个边界条件来过滤您的结果集。

希望这能帮助您解决问题。

关于android - 无法获取 Calendar.WEEK_OF_YEAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com