我遇到的情况非常奇怪。
我的代码:
val aa = "2017-01-17 01:33:00"
val bb = "04:33"
val hour = bb.substring(0, bb.indexOf(":"))
val mins = bb.substring(bb.indexOf(":") + 1, bb.length())
val negatedmins = "-" + mins
val ecoffsethour = hour.toLong
val ecoffsetmins = negatedmins.toLong
println(aa)
val datetimeformatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val txn_post_date_hkt_date_parsed = LocalDateTime.parse(aa, datetimeformatter)
println(txn_post_date_hkt_date_parsed)
val minushours = txn_post_date_hkt_date_parsed.minusHours(ecoffsethour)
println(minushours)
val minusmins = minushours.minusMinutes(ecoffsetmins)
println(minusmins)
val offsetPostdateDiff = minusmins.toString().replace("T", " ")
println(offsetPostdateDiff)
输出:
2017-01-17 01:33:00
2017-01-17T01:33
2017-01-16T21:33
2017-01-16T22:06
2017-01-16 22:06
在相同的代码中,我只将“aa”值更改为==> 2017-01-17 01:33:44
现在输出是:
2017-01-17 01:33:44
2017-01-17T01:33:44
2017-01-16T21:33:44
2017-01-16T22:06:44
2017-01-16 22:06:44
为什么第一种方法不考虑秒字段?
我的要求是:但是输出应该是“yyyy-MM-dd” HH:mm:ss“格式。
我对Scala很新。请赐教。
答案 0 :(得分:1)
在解析/生成字符串以表示日期时间值时,java.time类默认使用标准ISO 8601格式。
本地日期时间的标准格式是您在中间T
看到的内容:YYYY-MM-DDTHH:MM:SS.SSSSSSSSS
。
LocalDateTime ldt = LocalDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
String output = ldt.toString() ;
2017-01-23T12:34:56.789
您的电话println( txn_post_date_hkt_date_parsed )
隐式调用toString
对象上的内置LocalDateTime
方法,从而要求标准ISO 8601格式为T
。< / p>
println( txn_post_date_hkt_date_parsed.toString() )
在一个不相关的说明中,你工作太辛苦了。 java.time类处理偏移量。我不明白为什么你想要这样一个奇数(四小时三十三分钟)的偏移量,但也是如此。
以下是您修改的代码,但是使用的是Java语法。
String input = "2017-01-17 01:33:00" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
OffsetDateTime utc = ldt.atOffset( ZoneOffset.UTC ) ;
ZoneOffset offset = ZoneOffset.of( "-04:33" ) ; // Behind UTC by four hours and thirty-three minutes.
OffsetDateTime odt = utc.withOffsetSameInstant( offset ) ;
您可以看到此code run live at IdeOne.com。请注意wall-clock time的offset-from-UTC在上一个日期的情况。历史上的同一时刻,时间轴上的相同点,但通过两个不同的挂钟时间(UTC,并且落后4小时三十三分钟)观察。
最后的Z
是标准的ISO 8601表示法,是Zulu
的缩写,表示UTC。
输入:2017-01-17 01:33:00
ldt.toString():2017-01-17T01:33
utc.toString():2017-01-17T01:33Z
odt.toString():2017-01-16T21:00-04:33
答案 1 :(得分:0)
通常最好明确要输出的格式。
所以,而不是
println datetime
您可以这样做:
println datetimeformat.print(datetime)
祝你好运!
编辑:进行更改以使2个表达式完全等效