Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中java.util.Calendar的不同行为_Java_Android_Intellij Idea - Fatal编程技术网

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

Android中java.util.Calendar的不同行为,java,android,intellij-idea,Java,Android,Intellij Idea,所以我想实现一种方法,给我工作日的日期,如果是周六或周日,给我下一周的日期。为了实现这一点,我使用了Calendar和setFirstDayOfWeek方法。 这就是我的代码的外观: Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin")); calendar.setFirstDayOfWeek(Calendar.SATURDAY); calendar.set(Calen

所以我想实现一种方法,给我工作日的日期,如果是周六或周日,给我下一周的日期。为了实现这一点,我使用了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...
如果我在12月6日星期六用IntelliJ编译,我会得到以下日期:

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%兼容,特别是对于默认语言环境之类的东西

有关更多信息,请参见

java.time 虽然我无法解释行为差异,但我可以建议将这些麻烦的旧日期时间类转储到以正常方式工作的现代类:java.time类

ZoneId z = ZoneId.of( "Europe/Berlin" ) ;
LocalDate today = LocalDate.now( z ) ;  // Current moment.
DayOfWeek
enum定义了七个对象,一周中的每一天一个。将“周末”定义为这些对象的集合

Set< DayOfWeek > weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY ) ;
收集一周中剩余的几天

List< LocalDate > daysOfTheWeek = new ArrayList<>( 5 ) ;
daysOfTheWeek.add( monday ) ;
for( int i = 1 ; i <= 4 ; i ++ ) {
    daysOfTheWeek.add( monday.plusDays( i ) ) ; // Tuesday, Wednesday, Thursday, Friday.
}
ListdaysOfTheWeek=newarraylist(5);
daysOfTheWeek.add(星期一);

对于(int i=1;我的问题是关于运行时代码在设备上的行为差异,或者只是关于IDE在调试器中对日期的表示?问题是关于代码在不同平台PC和Android上的行为,尽管记录完全相同。感谢您的回答。在这两个平台上,我得到了相同的结果对于getFirstDayOfWeek(),我想语言环境不是问题所在。我也知道平台之间可能存在的差异,但由于Java文档和Android Doc for Calendar完全相同,我不知道从哪里找到代码行为不同的解决方案。
List< LocalDate > daysOfTheWeek = new ArrayList<>( 5 ) ;
daysOfTheWeek.add( monday ) ;
for( int i = 1 ; i <= 4 ; i ++ ) {
    daysOfTheWeek.add( monday.plusDays( i ) ) ; // Tuesday, Wednesday, Thursday, Friday.
}