我已经尝试过使用: getWeek getCalendarDate 我不想使用Calendar包(因为我使用的是不允许我使用它的特定软件) 提前谢谢,
答案 0 :(得分:1)
很抱歉我无法编写Scala代码。我将不得不相信你能从我的Java片段中进行调整。
如果可以的话,放弃长期过时的Date
课程。例如,使用来自ZonedDateTime
的{{1}},即现代Java日期和时间API。
java.time
同样适用于 int weekNumber = myZonedDateTime.get(WeekFields.ISO.weekOfYear());
,OffsetDateTime
和LocalDateTime
。对于今天(2017年12月6日)的日期或日期时间,您将获得49。
我使用ISO 8601 weeks(星期一是星期的第一天,第1周是1月至少4天的第一周)。如果您的周数不同,请替换其他LocalDate
对象,例如WeekFields
。
如果您无法避免获得旧式WeekFields.SUNDAY_START
对象,请将其转换为现代Date
并使用现代API执行进一步操作:
Instant
请替换您想要的时区(前提是您不想要太平洋/瑙鲁)。获得 ZonedDateTime converted = oldFashionedDate.toInstant()
.atZone(ZoneId.of("Pacific/Nauru"));
后,按上述步骤操作。
答案 1 :(得分:1)
import java.util.Calendar
import java.util.GregorianCalendar
val calendar = new GregorianCalendar()
calendar.setTime(sail_dt)
calendar.get(Calendar.WEEK_OF_YEAR)
最后,我设法找到了一个SCALA代码来解决我的问题。谢谢大家。
答案 2 :(得分:0)
你应该能够看到java.utils.Date
没有获得一周的方法。
人们通常会使用Calender
来满足各种要求。在您的情况下,您可以使用DateFormat
将Date
对象格式化为String
,然后解析它以获取整数值。
import java.text.SimpleDateFormat
import java.util.Date
val date = new Date()
// if you want week in year
val formatter1 = new SimpleDateFormat("w")
val week1 = Integer.parseInt(formatter1.format(date))
// if you want week in month
val formatter2 = new SimpleDateFormat("W")
val week2 = Integer.parseInt(formatter2.format(date))
答案 3 :(得分:0)
org.threeten.extra.YearWeek.from(
myJavaUtilDate.toInstant()
.atZone( ZoneId.of( "Pacific/Auckland" ) )
).getWeek()
49
YearWeek
Answer by Ole V.V.是正确而明智的。
(Java语法在这里;不知道Scala)
如果在几周内做了很多工作,并且您对周的定义与ISO 8601 definition of week一致,其中第1周包含第一个星期四,星期一是第一个星期几,那么请考虑添加{{3库到你的项目。该库包含许多扩展java.time类功能的类。特别是ThreeTen-Extra类。
首先将可疑的java.util.Date
对象转换为java.time。
YearWeek
类代表Instant
中时间轴上的一个时刻,分辨率为UTC(小数部分最多九(9)位)。
Instant instant = myJavaUtilDate.toInstant();
指定要通过其查看日期的时区。时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在nanoseconds午夜后的几分钟是新的一天,而Paris France中仍然是“昨天”。
以continent/region
的格式指定Montréal Québec,例如proper time zone name,America/Montreal
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
生成YearWeek
对象,以表示ISO 8601周日期系统中该时刻的年周,即基于周的年和基于周的年的组合。
YearWeek yw = YearWeek.from( zdt ) ;
如果您想使用标准ISO 8601格式表示该值,只需致电Africa/Casablanca
即可。
String output = yw.toString() ;
2017-W49
如果您想将周数表示为整数,请拨打YearWeek::toString
。
int weekNumber = yw.getWeek() ;
49
顺便说一句,你应该避免使用Calendar
类,以及Date
,SimpleDateFormat
和java.sql类。所有那些麻烦的旧日期时间类现在都是遗留的,完全被java.time类取代。
YearWeek::getWeek
框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和& Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
从哪里获取java.time类?
How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-Extra,Interval
,YearWeek
和YearQuarter
。