Java 设置日历时,周中的天不正确

Java 设置日历时,周中的天不正确,java,calendar,dayofweek,Java,Calendar,Dayofweek,当我得到当前日期时,它会将我4作为当前周的日期返回。但是当我用calendar.set(mYear,mMonth,mDay)设置日期时,我得到一周中的当前日期为7。我检查了一下日期是否相同,一切似乎都是一样的,但我得到了不同的一天 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); Calendar calendario = Calendar.getInstance()

当我得到当前日期时,它会将我
4
作为当前周的日期返回。但是当我用
calendar.set(mYear,mMonth,mDay)设置日期时
,我得到一周中的当前日期为
7
。我检查了一下日期是否相同,一切似乎都是一样的,但我得到了不同的一天

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
Calendar calendario = Calendar.getInstance();    
Log.w("TAG",""+"********:"+calendario.get(Calendar.DAY_OF_WEEK));
Log.w(4);


mYear = "2012";
mMonth = "10";
mDay = "10";

Calendar calendario = Calendar.getInstance();
calendario.set(mYear, mMonth, mDay);
Log.w("TAG","---------: "+calendario.get(Calendar.DAY_OF_WEEK));
    Log.w(7);
有人知道会发生什么吗


谢谢

你可能的问题是。因此,如果你想将日历设置为,你必须使用9,而不是10

这是愚蠢和不一致的日历吗?对使用用于处理日期和时间的。据我所知,它目前是事实上的标准,直到它出现。

int month=9
int year=2012
int-day=10
calendario.set(2012,9,10)

10月份使用9,因为1-12月份触发为0-11。

tl;博士 java.time time类使用合理的编号方案,不同于它们所取代的麻烦的旧日期时间类

  • 2018年是2018年
  • 1月至12月为1-12日
  • 周一至周日1-7
LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区

时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好将所需/预期时区明确指定为参数

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求它并将其作为参数传递。如果省略,则隐式应用JVM的当前默认值。最好是显式的,因为JVM中任何应用程序的任何线程中的任何代码都可能在运行时的任何时刻更改默认值

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
或者指定一个日期。你可以用一个数字来设置月份,1-12月的数字为1-12

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,最好使用预定义的枚举对象,一年中每个月一个。提示:在整个代码库中使用这些
Month
对象,而不仅仅是一个整数,这样可以使代码更加自我记录,确保有效值,并提供更高的可用性

通过智能
DayOfWeek
对象获取星期几

DayOfWeek dow = ld.getDayOfWeek() ;
我建议使用这样的对象,而不仅仅是整数。但如果你坚持:

int dowNumber = ld.getDayOfWeek().getValue() ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可能会在这里找到一些有用的类,如、、和。

您的问题有点不清楚,这些
calendario
引用变量是否在同一范围内?很抱歉,我的英语不好,我的问题是:当我收到当前星期的日期收据时,如果我用set手动设置今天的日期,则在同一日期获得7。你明白我的意思吗?我也不明白你的问题。我尝试了你的代码,得到的结果总是“4”。注意,设置字段时,你应该使用
Calendar
常量。例如,
Calendar.set(Calendar.MONTH,Calendar.十月)
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
DayOfWeek dow = ld.getDayOfWeek() ;
int dowNumber = ld.getDayOfWeek().getValue() ;