2017-01-25 17 views
0

私が遭遇していることは非常に独特です。形式yyyy-MM-dd文字列から日付へのHH:mm:ss形式

マイコード:

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にとってかなり新しいです。私を教えてください。

+1

は、あなただけの日付を印刷しないで解析するフォーマッタを使用しています。もう1つの問題は、すでに提供されている時間計算をやっていることです。 – pedrofurla

+0

@pedrofurla:その麻酔薬は私の要求通りです。この問題とは何の関係もないことを願っています。 –

答えて

0

通常、出力する形式を明示的に指定する方がよいでしょう。

ので、代わりに

println datetime 

のあなたは、このような何かを行うことができます。

println datetimeformat.print(datetime) 

幸運を!

編集:変更は

+0

実際には 'println(datetimeformat.print(datetime))' – pedrofurla

+0

ありがとう@pedrofurla。 –

1

デフォルトのフォーマットは8601日時を表す文字列を生成/解析するときjava.timeクラスは、デフォルトでは標準ISO 8601形式を使用

ISOで全く同じ2つの表現を作るために作られました値。

ローカル日時の標準的な形式は、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

println(txn_post_date_hkt_date_parsed.toString()) 

オフセット

無関係なノートで、あなたも懸命に働いています。 java.timeクラスはオフセットを処理します。私はなぜそのような奇数(4時間33分)の相殺を望んでいるのか理解していないが、そうである。

コードは改訂されましたが、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です。 offset-from-UTCwall-clock timeがどのように前回の日付であるかに注目してください。歴史の同じ瞬間、タイムライン上の同じ点ですが、2つの異なる壁時計の時間(UTC、および4時間30分後)で見られます。

最後のZは標準ISO 8601表記であり、Zuluの略でUTCを意味します。

入力:2017年1月17日午前1時33分00秒

ldt.toString():2017-01-17T01:33

utc.toString():2017-01-17T01 :33Z

odt.toString():2017-01-16T21:00-04:33

関連する問題