如何从scala中的java.util.Date中提取周数
我已经尝试使用: getWeek 获取日历日期 我不想使用日历软件包(因为我使用的是一个不允许我使用的特定软件)如何从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
提前感谢,以下是 您应该能够看到,
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日期和时间APIjava.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日期和时间APIjava.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)