Android 周数对于手机而言错误,但模拟器则不然

发布于 2024-11-07 06:56:07 字数 1237 浏览 0 评论 0原文

我有一个程序,它在很大程度上依赖于识别一年中的周数。我已经完成了跑腿工作,找出了会导致的所有问题,并用这种方法解决了。我在 53 周之类的年份里工作得非常完美。我唯一的问题是,当我在 2.2 版模拟器上运行它时,它运行得很好,就像这是第 19 周,它是正确的。当我在手机 G1 上运行它时,周显示 20。我该如何解决这个问题?

这是我的周代码:

/**
 * Format the date into a number that is the year*100 plus the week i.e. 2008 and its week 11
 * would show as 811
 * @param - String of a date to create a week id, must be in format of 2011-01-31 (YYYY-MM-DD)
 * @return returns next weeks id
 */
public static int getWeekId(String date){

    // Set the first day of week to Monday and set the starting new year weeks
    // as a full first week in the new year.
    Calendar c = Calendar.getInstance();
    c.setFirstDayOfWeek(Calendar.MONDAY);
    c.setMinimalDaysInFirstWeek(7);

    if (!date.equalsIgnoreCase("")) {
        String[] token = date.split("-", 3);
        int year = Integer.parseInt(token[0]);
        int month = Integer.parseInt(token[1])-1; // months are 0-11 stupid..
        int day = Integer.parseInt(token[2]);
        c.set(year, month, day);
    }


    int yearWeek = ( (c.get(Calendar.YEAR) - 2000)*100 + (c.get(Calendar.WEEK_OF_YEAR)));

    Log.d("getWeekId()"," WEEK_OF_YEAR: " + c.get(Calendar.WEEK_OF_YEAR));

    return yearWeek;

}

I have a program where it relies heavily on identifying the week number for the year. I have done the leg work and figured out all the problems that will cause and settle with this method. I works perfect for years that have 53 weeks and such. My only issue is that when I run it on my emulator for 2.2 it works perfect, like this is week 19 and its correct. when I run it on my phone a G1, the week shows 20. How do I fix this?

Here is my week code:

/**
 * Format the date into a number that is the year*100 plus the week i.e. 2008 and its week 11
 * would show as 811
 * @param - String of a date to create a week id, must be in format of 2011-01-31 (YYYY-MM-DD)
 * @return returns next weeks id
 */
public static int getWeekId(String date){

    // Set the first day of week to Monday and set the starting new year weeks
    // as a full first week in the new year.
    Calendar c = Calendar.getInstance();
    c.setFirstDayOfWeek(Calendar.MONDAY);
    c.setMinimalDaysInFirstWeek(7);

    if (!date.equalsIgnoreCase("")) {
        String[] token = date.split("-", 3);
        int year = Integer.parseInt(token[0]);
        int month = Integer.parseInt(token[1])-1; // months are 0-11 stupid..
        int day = Integer.parseInt(token[2]);
        c.set(year, month, day);
    }


    int yearWeek = ( (c.get(Calendar.YEAR) - 2000)*100 + (c.get(Calendar.WEEK_OF_YEAR)));

    Log.d("getWeekId()"," WEEK_OF_YEAR: " + c.get(Calendar.WEEK_OF_YEAR));

    return yearWeek;

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笙痞 2024-11-14 06:56:07

(我会将其留在评论中,但我的帐户还没有评论权限。)

当使用 2011-01-01 调用时,代码当前返回 1152。这是预期的吗?

(I'd leave this in a comment, but my account does not yet have commenting permissions.)

When called with 2011-01-01, the code currently returns 1152. Is this as intended?

慈悲佛祖 2024-11-14 06:56:07

就其价值而言,它可能比您所写的更复杂。我这么说并不是刻薄的,只是可能有很多有趣的怪异案例你没有考虑过。有一个很好的 Java 库,它了解大量有关时间的内容,并且可能已经编写了此代码,请查看: http://joda-time.sourceforge.net/

For what it's worth, there is likely more intricacy to it than you've written. I don't say this to be mean, it's just that there are probably lots of interesting weird cases that you haven't considered. There is a good Java library that knows a ton of stuff about times, and may have this code written already, Check it out: http://joda-time.sourceforge.net/

老旧海报 2024-11-14 06:56:07

显然这是 Android 手机中的一个错误...所以在使用 Android 1.6 时请注意这一点。

Apparently its a bug in the android phone...so watch out for this when using android 1.6.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文