java - Android 中 java.util.Calendar 的不同行为

标签 java android intellij-idea

所以我想实现一种方法,为我提供工作日的日期,以及如果是星期六或星期日,则下周的日期。为了实现这一点,我使用了 Calendar 和 setFirstDayOfWeek 方法。 这就是我的代码的样子:

    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin"));
    calendar.setFirstDayOfWeek(Calendar.SATURDAY);
    calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //write to array 
    calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);//write
    calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); // and so on...

如果我周六在 IntelliJ 中编译它。 12 月 6 日,我得到以下日期:

Mon Dec 08 23:44:32 CET 2014
Tue Dec 09 23:44:32 CET 2014
...
Sat Dec 06 23:44:32 CET 2014
Sun Dec 07 23:44:32 CET 2014

..正如预期的那样。如果不将一周的第一天设置为星期六,则星期一的日期将为 12 月 1 日。

现在我在 Android Studio 下使用完全相同的代码。如果我不将一周的第一天设置为星期六,那么日期看起来就像在 IntelliJ 中一样。 谁能告诉我为什么相同的代码会提供不同的结果?

最佳答案

这可能是一周默认第一天的差异。 尝试在 getInstance() 之后立即在两个平台上执行 calendar.getFirstDayOfWeek(),看看会得到什么。

如果您得到不同的值,则可能是问题所在,而这又可能是由于不同的默认区域设置造成的。尝试在两个平台上构建具有相同区域设置的日历。

然后,还要记住,当您用 Java 编写 Android 代码时,在运行时,它不是在 JVM 上执行,而是使用 Dalvik 运行时。无法保证两者 100% 兼容,尤其是对于默认区域设置之类的内容。

有关详细信息,请参阅How to specify firstDayOfWeek for java.util.Calendar using a JVM argument

关于java - Android 中 java.util.Calendar 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337544/

相关文章:

java - 如何在 IntelliJ 中为特定对象实例设置断点条件?

java - 如何通过方法更改类中的静态变量

android - 不应该为 RecyclerView 项目 View 使用数据绑定(bind)吗?

java - 使用java编程语言合并一些ogg音频文件

java - 自定义适配器中的 "Variable is accessed from within inner class, needs to be declared final"错误

android - 在 Android O 中使用 Intent 广播 USER_PRESENT

git - 通过 intelliJ 添加远程 git repo

git - IntelliJ - 推送当前分支以外的分支

java - token 拦截器在 Struts 2 中如何工作

Java:如何找出字体的大写高度和 x 高度?