Java 尝试解析时,日期时间在scala中解析不正确。显示所有日期的默认时间';s
尝试解析时,日期时间在scala中解析不正确。显示所有日期的默认时间 使用joda时间以及正常的简单日期时间Java 尝试解析时,日期时间在scala中解析不正确。显示所有日期的默认时间';s,java,scala,date,datetime,dateformatter,Java,Scala,Date,Datetime,Dateformatter,尝试解析时,日期时间在scala中解析不正确。显示所有日期的默认时间 使用joda时间以及正常的简单日期时间 import org.joda.time.DateTime import org.joda.time.format.DateTimeFormat val dateFormat="YYYY-MM-DD HH:mm:ss" val tempString="2019-01-01 00:00:00" println(DateTime.parse(tempString,DateTimeForma
import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat
val dateFormat="YYYY-MM-DD HH:mm:ss"
val tempString="2019-01-01 00:00:00"
println(DateTime.parse(tempString,DateTimeFormat.forPattern(dateFormat)).toString("YYYY-MM-DD"))
val dateFormat="YYYY-MM-DD HH:mm:ss"
val tempString2="2019-05-01 00:00:00"
println(DateTime.parse(tempString2,DateTimeFormat.forPattern(dateFormat)).toString("YYYY-MM-DD"))
scala> val dateFormat="YYYY-MM-DD HH:mm:ss"
dateFormat: String = YYYY-MM-DD HH:mm:ss
scala> val tempString="2019-01-01 00:00:00"
tempString: String = 2019-01-01 00:00:00
scala> println(DateTime.parse(tempString,DateTimeFormat.forPattern(dateFormat)).toString("YYYY-MM-DD"))
2019-01-01
scala> val dateFormat="YYYY-MM-DD HH:mm:ss"
dateFormat: String = YYYY-MM-DD HH:mm:ss
scala> val tempString2="2019-05-01 00:00:00"
tempString2: String = 2019-05-01 00:00:00
scala> println(DateTime.parse(tempString2,DateTimeFormat.forPattern(dateFormat)).toString("YYYY-MM-DD"))
2019-01-01
简单日期格式
import java.util.Date
import java.text.SimpleDateFormat
import java.sql.Timestamp
println(formatter.parse(tempString2))
println(formatter.parse(tempString))
scala> println(formatter.parse(tempString2))
Sun Dec 30 00:00:00 IST 2018
scala> println(formatter.parse(tempString))
Sun Dec 30 00:00:00 IST 2018
我无法准确地指出这个问题。请告诉我这个。使用
yyyy-MM-dd HH:MM:ss
,因为dd
是一年中的一天,而您想要dd
月中的一天(同时使用DateTimeFormat
和SimpleDateFormat
),但差异是因为yyyy
表示纪年,使用DateTimeFormat
,但是使用SimpleDateFormat
的周年,您需要yyy
年(两者都有)。非常感谢您现在获得了正确的时间。:)我建议您不要使用SimpleDateFormat
和Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。乔达时间比较好。最好的是LocalDateTime
和DateTimeFormatter
,它们都来自@OleV.V。你错了,但我自己也这么认为,然后我意识到第一个示例是解析日期值2019-01-01
,无论使用DD
(一年中的一天)还是DD
(一个月中的一天),都会得到相同的日期。问题实际上是自Joda Time和SimpleDateFormat对其含义不一致以来的YYYY
,这就是他们给出不同结果的原因(2019-01-01
vs2018年12月30日
),正如我在评论中所说。但是您是对的,第二个示例还存在DD
问题,因为它最终覆盖了MM
值,得到的是一月,而不是五月。请恢复链接。@Andreas我可能不清楚,但我没有错。第一个示例将2019-01-01
和2019-05-01
解析为2019-01-01,这是不正确的,通过将所有四种格式模式字符串中的DD
更改为DD
来修复。将YYYY
更改为yyy
在这里没有任何区别,也就是说,无法解决问题。我想这大概就是我们双方的意思。使用yyyy-MM-dd HH:MM:ss
,因为dd
是一年中的一天,而您想要dd
月中的一天(同时使用DateTimeFormat
和SimpleDateFormat
),但这种差异是因为YYYY
表示纪年,日期格式为DateTimeFormat
,但周年格式为SimpleDateFormat
,您需要YYYY
年(两者都有)。非常感谢您现在获得了正确的时间。:)我建议您不要使用SimpleDateFormat
和Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。乔达时间比较好。最好的是LocalDateTime
和DateTimeFormatter
,它们都来自@OleV.V。你错了,但我自己也这么认为,然后我意识到第一个示例是解析日期值2019-01-01
,无论使用DD
(一年中的一天)还是DD
(一个月中的一天),都会得到相同的日期。问题实际上是自Joda Time和SimpleDateFormat对其含义不一致以来的YYYY
,这就是他们给出不同结果的原因(2019-01-01
vs2018年12月30日
),正如我在评论中所说。但是您是对的,第二个示例还存在DD
问题,因为它最终覆盖了MM
值,得到的是一月,而不是五月。请恢复链接。@Andreas我可能不清楚,但我没有错。第一个示例将2019-01-01
和2019-05-01
解析为2019-01-01,这是不正确的,通过将所有四种格式模式字符串中的DD
更改为DD
来修复。将YYYY
更改为yyy
在这里没有任何区别,也就是说,无法解决问题。我想这大概就是我们俩想说的。