如何从scala中的java.util.Date中提取周数

如何从scala中的java.util.Date中提取周数,scala,week-number,java.util.date,Scala,Week Number,Java.util.date,我已经尝试使用: getWeek 获取日历日期 我不想使用日历软件包(因为我使用的是一个不允许我使用的特定软件) 提前感谢,以下是 您应该能够看到,java.utils.Date没有获取周的方法 人们通常使用日历来满足各种需求。在本例中,您可以使用DateFormat将Date对象格式化为String,然后解析它以获得整数值 import java.text.SimpleDateFormat import java.util.Date val date = new Date() // if

我已经尝试使用: getWeek 获取日历日期 我不想使用日历软件包(因为我使用的是一个不允许我使用的特定软件)
提前感谢,

以下是

您应该能够看到,
java.utils.Date
没有获取周的方法

人们通常使用
日历来满足各种需求。在本例中,您可以使用
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))

以下是有关的API文档

您应该能够看到,
java.utils.Date
没有获取周的方法

人们通常使用
日历来满足各种需求。在本例中,您可以使用
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))

很抱歉,我不能编写Scala代码。我将不得不相信您会根据我的Java代码片段进行调整

如果可以,请放弃早已过时的
Date
类。例如,使用现代java日期和时间API
java.time
中的
ZoneDateTime

    int weekNumber = myZonedDateTime.get(WeekFields.ISO.weekOfYear());
这同样适用于
OffsetDateTime
LocalDateTime
LocalDate
。对于今天(2017年12月6日)的日期或日期时间,您将获得49

我使用了(周一是一周的第一天,第1周是一月份至少有4天的第一周)。如果您的周数不同,请替换不同的
WeekFields
对象,例如
WeekFields.SUNDAY\u START

如果无法避免获取老式的
日期
对象,请将其转换为现代的
即时
,并使用现代API执行进一步的操作:

    ZonedDateTime converted = oldFashionedDate.toInstant()
            .atZone(ZoneId.of("Pacific/Nauru"));

请替换您想要的时区(前提是您不想要太平洋/瑙鲁)。一旦你有了一个
ZoneDateTime
,按上面的步骤进行。

很抱歉,我不能编写Scala代码。我将不得不相信您会根据我的Java代码片段进行调整

如果可以,请放弃早已过时的
Date
类。例如,使用现代java日期和时间API
java.time
中的
ZoneDateTime

    int weekNumber = myZonedDateTime.get(WeekFields.ISO.weekOfYear());
这同样适用于
OffsetDateTime
LocalDateTime
LocalDate
。对于今天(2017年12月6日)的日期或日期时间,您将获得49

我使用了(周一是一周的第一天,第1周是一月份至少有4天的第一周)。如果您的周数不同,请替换不同的
WeekFields
对象,例如
WeekFields.SUNDAY\u START

如果无法避免获取老式的
日期
对象,请将其转换为现代的
即时
,并使用现代API执行进一步的操作:

    ZonedDateTime converted = oldFashionedDate.toInstant()
            .atZone(ZoneId.of("Pacific/Nauru"));
请替换您想要的时区(前提是您不想要太平洋/瑙鲁)。一旦你有了一个
ZoneDateTime
,按照上面的步骤进行操作。

tl;博士 49

YearWeek
这是正确和明智的

(此处为Java语法;不知道Scala)

如果周工作很多,你的周定义与周1包含第一个星期四和星期一是第一周的周相一致,那么考虑将库添加到你的项目中。该库包含许多扩展java.time类功能的类。尤其是一个班级

首先将
java.util.Date
对象转换为java.time

该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)

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

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

生成
YearWeek
对象以表示ISO 8601 week日期系统中该时刻的年-周,即基于周的年和基于周的年的周的组合

YearWeek yw = YearWeek.from( zdt ) ;
如果您想用标准ISO 8601格式表示该值,只需调用

2017-W49

如果您想将周数表示为整数,请调用

49

避免遗留日期时间类 顺便说一下,您确实应该避免使用
Calendar
类,以及
Date
SimpleDateFormat
和java.sql类。所有那些麻烦的旧日期时间类现在都是遗留的,完全被java.time类所取代


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

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

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如
String output = yw.toString() ;
int weekNumber = yw.getWeek() ;
import java.util.Calendar
import java.util.GregorianCalendar 

val calendar = new GregorianCalendar()

calendar.setTime(sail_dt)   
calendar.get(Calendar.WEEK_OF_YEAR)