Scala/java清理月日大于31或小于1?

Scala/java清理月日大于31或小于1?,java,scala,jodatime,Java,Scala,Jodatime,使用JodaTime库(尽管我有点灵活)。我意识到一些输入会破坏Joda时间,因为一个月的天数大于31天或小于1天(因为客户端代码) 我正在使用LocalDate对象进行日历操作。是否有一个库或方法可以轻松清理日期,以便输入不会引发异常 我现在使用的一些Scala代码:EDIT:Fixed code val now = new LocalDate(); val workingDate = now.withYear(y).withMonthOfYear(m).withDayOfMonth(d)

使用JodaTime库(尽管我有点灵活)。我意识到一些输入会破坏Joda时间,因为一个月的天数大于31天或小于1天(因为客户端代码)

我正在使用
LocalDate
对象进行日历操作。是否有一个库或方法可以轻松清理日期,以便输入不会引发异常

我现在使用的一些Scala代码:EDIT:Fixed code

 val now = new LocalDate();
 val workingDate = now.withYear(y).withMonthOfYear(m).withDayOfMonth(d).withDayOfWeek(DateTimeConstants.SUNDAY)

 ymdStart = toTimestampAtStart( workingDate )
为了澄清,这里的目标是将日期转换为适当的日期,因此,如果用户提交了7月38日,它将转换为8月7日。有一个传入的URL结构导致了很多这种情况,它看起来像
/timeline/2012/07/30

出于纯粹练习的原因(我同意规范化似乎是一种不好的做法),我现在只想知道是否有库处理这样的问题

谢谢

最终更新:

正如答案所指出的,正常化是一个糟糕的想法。我在客户端做了很多重分解来修复传入的变量。这是我最后使用的代码:

ymdStart = new Timestamp( toTimestampAtStart( new LocalDate(y,m,d).withDayOfWeek(1) ).getTime - 86400000 )
ymdEnd = new Timestamp( ymdStart.getTime + 691200000 )

首先,LocalDate是不可变的,因此每个用…()链接的
都在创建一个新日期

其次,一次更新一个日期片段是众所周知的反模式。最终结果将取决于日期的当前值、更新片段的顺序以及实现是否“规范化”日期

换句话说,从不逐段更新日期/时间

假设实现“正常化”(即纠正溢出)无效日期一分钟。根据你的代码,如果今天的日期是2011年1月31日,而你做到了

now.setMonth(FEBRUARY);
now.setDayOfMonth(12);
结果将于2011年3月12日公布。第一条语句将日期设置为2月31日,正常化为3月3日,然后将日期设置为12日。啊,你说,你可以先定一个月的哪一天。但这对不同的起点不起作用(构建起点只是一个练习)


从你的问题来看,我猜测JodaTime抛出异常而不是规范化,这也是不这样做的原因。

这在语法上是无效的Java…@JimGarrison whoops yea刚刚意识到我开始链接函数(在Javascript模式下思考LOL)您没有提供足够的信息来说明您要完成的任务以及看到的错误。似乎更好的解决方案是告诉用户他们犯了错误,而不是进行假设。为什么要设置月日和星期日?如果目标是找到“最近的”星期天,则需要一种不同的算法。这可以解释一些问题。没有意识到对象是不可变的。是你的朋友。啊,看到你的编辑,所以这里的基本问题实际上是LocalDate对象的语法和不可变性。假设我没有使用
LocalDate
,有没有更好的方法(问题是它很灵活)?我将进一步澄清这个问题。LocalDate有一个需要年/月/日的构造函数。我当时正在扫描javadoc方法,甚至没有滚动到构造函数。我基本上是通过Scala被介绍给JVM的,所以我习惯了Scaladocs lol,谢谢大家的关注。