首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三星J7每周第一天返回2

三星J7每周第一天返回2
EN

Stack Overflow用户
提问于 2016-10-14 10:38:20
回答 2查看 83关注 0票数 0

我为自定义日历编写了代码,在其中我使用日历对象,我使用getFirstDayOfWeek()方法来检索每个月加载的每个month.On的第一天,方法"_calendar.getTime()“返回第一个日期。在每台设备上,它都在三星J7上返回J7,它将每周的起始日期返回为2。这是我的三星J7调试器日志

java.util.GregorianCalendartime=?,areFieldsSet=false,lenient=true,zone=亚洲/加尔各答,firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2016,MONTH=10,WEEK_OF_YEAR=41,WEEK_OF_MONTH=3,DAY_OF_MONTH=14,DAY_OF_YEAR=288,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=46,AM_PM=1,En19#,en20 20#,en21#

它说firstDayOfWeek =2,对于它显示为1的其他设备,那么对于解决方案有什么想法吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-10-14 11:00:06

好的,我找到解决办法了。我没有使用getFirstDayOfWeek(),而是传递了1作为参数。所以它现在正常工作了。

代码语言:javascript
复制
 _calendar.set(year, (month - 1), 1);

代替

代码语言:javascript
复制
_calendar.set(year, (month - 1), _calendar.getFirstDayOfWeek());
票数 0
EN

Stack Overflow用户

发布于 2017-05-10 02:45:32

tl;dr

  • 你好像把一个月的第一天和一周的第一天混为一谈。
  • 2是一个硬编码常量,表示星期一。
  • 显然,您当前默认的地区认为星期一是一周的第一天。
  • 使用java.time代替。

一周的第一天:

代码语言:javascript
复制
LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) ) 

本月第一天:

代码语言:javascript
复制
LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )
         .with( ChronoField.DAY_OF_MONTH , 1L )

详细信息

getFirstDayOfWeek()检索每个月的第一天

你似乎把一周的第一天和第一个月的第一天搞混了。

当然,这个月的第一天总是1

一周的第一天是一周中的一天,如星期日或星期一等。Calendar类中一周的第一天的定义是不同的,这取决于Locale。例如,在北美大部分地区,第一天通常是星期天。在欧洲大部分地区,一周的第一天是星期一。

如果未能指定Locale,则Calendar类将隐式应用JVM当前的默认区域设置。显然,在您默认的地区,一周的第一天是星期一。我推断这是因为你报告的数字是2。如果您探索int常量Calendar.MONDAY,就会找到2

避免遗留日期-时间类

Calendar类有许多糟糕的设计决策。我认为这种对每周一天的不同定义就是其中之一。避免这些麻烦的旧日期时间类(如CalendarDate )的原因之一是。这些类现在是遗留的,被java.time类所取代。

使用java.time

LocalDate类表示一个日期纯值,没有一天的时间,也没有时区.

时区是确定日期的关键。在任何特定时刻,全球各地的日期因地区而异。例如,午夜后几分钟在法国巴黎是一个新的一天,而仍然“昨天”在魁北克省

continent/region格式指定continent/region,如America/MontrealAfrica/CasablancaPacific/Auckland。不要使用3-4字母的缩写,如ESTIST,因为它们不是真正的时区,不标准化,甚至不是唯一的(!)。

代码语言:javascript
复制
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

要获得一周的第一天,(a)决定星期的第一天是什么,(b)使用TemporalAdjusters中定义的TemporalAdjusters实现来获取特定DayOfWeek枚举对象的日期。

代码语言:javascript
复制
DayOfWeek firstDow = DayOfWeek.MONDAY ;
LocalDate ld = today.with( TemporalAdjusters.previousOrSame( firstDow ) ) ;

要获得一个月中某一天的LocalDate,请调用with方法并从ChronoField.DAY_OF_MONTH传递一个enum对象。

代码语言:javascript
复制
LocalDate firstOfMonth = today.with( ChronoField.DAY_OF_MONTH , 1L ) ;

关于java.time

java.time框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.DateCalendarSimpleDateFormat

尤达-时间项目现在在维护模式中,建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310

在哪里获得java.time类?

  • Java 8Java 9,以及后来的
    • 内置的。
    • 带有捆绑实现的标准Java的一部分。
    • Java 9添加了一些次要的特性和修复。

  • Java 6Java 7
    • java.time的大部分功能都是在http://www.threeten.org/threetenbp/中移植到Java6&7中的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40041147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档