Java 日历错误

标签 java calendar

我在使用 Java 日历时遇到一些问题。当我向日历添加几周时,它在某些情况下无法正常工作。例如。将 week_of_yer 设置为 3,然后添加 -3 周;)在大多数情况下效果很好,但在 2010 年、2016 年等情况下效果不佳。(今年是一年后的 53 周)。它看起来像 JDK 中的错误,我认为当周数为 52 时它们会更改年份:D 一些简单的代码:

Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2016);
calendar.set(Calendar.WEEK_OF_YEAR, 3);
calendar.add(Calendar.WEEK_OF_YEAR, -3);
System.out.println("rolled week: " + calendar.get(Calendar.WEEK_OF_YEAR) + " - " + calendar.get(Calendar.YEAR));

此代码的结果是:滚动周:53 - 2016 :D

在所有其他情况下应为 53 - 2015,它应按预期工作。

有人有类似的问题吗?

最佳答案

问题是您显示的是年份而不是年份。您不需要对日历进行算术来显示这一点。基本上,您显示的是 2016 年 1 月 1 日。其中的年份是 2016 年,但年份(即计算一年中的星期的年份)是2015年。

不幸的是,据我所知,Java 没有办法获取星期几。你最好使用 Joda Time ,它可以让您轻松完成这一切:

import org.joda.time.*;

public class Test {
    public static void main(String[] args) throws Exception {
        LocalDate date = new LocalDate(2016, 1, 1);
        System.out.println(date);
        System.out.println(date.getWeekOfWeekyear());
        System.out.println(date.getWeekyear());
    }    
}

输出:

2016-01-01
53
2015

关于Java 日历错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13536509/

相关文章:

java - 获取资源的大小

java - [java]删除多余的空格

java - 如何从Java代码而不是命令提示符运行mahout的逻辑回归?

java - 如何创建具有特定时区的日历?

c# - EWS - 访问共享日历项目/约会

java - Jersey : Unable to Get Sub-Sub-Resource

java - Android:定义要使用的加密方式:AES 128 或 AES 256

android - 在 ICS 中创建可同步日历

python - 从 HTMLCalendar() 中剥离所有 '\n'

ios - "calinvite"ios 中的 url 方案?