2017-01-25 1 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:44

을 == 만은 "AA"값을 변경하고 같은 코드에서

2017-01-17 01:33:00 
2017-01-17T01:33 
2017-01-16T21:33 
2017-01-16T22:06 
2017-01-16 22:06 

:

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 

첫 번째 방법이 초 필드를 고려하지 않는 이유는 무엇입니까?

내 요구 사항은 다음과 같습니다 형식으로 출력이 ": mm SS YYYY-MM-DD HH"을 와서해야하지만.

저는 스칼라가 처음입니다. 제발 저를 계몽하십시오.

+1

는 당신은 날짜를 인쇄하지 구문 분석 포맷터를 사용하고 있습니다. 또 다른 문제는, 당신은 이미 제공되는 시간 산술을하고 있다는 것입니다. – pedrofurla

+0

@pedrofurla : 그 arthimetics 내 요구 사항에 있습니다. 희망은 그 문제와 관련이 없다. –

답변

0

일반적으로 출력을 원하는 형식을 명시 적으로 지정하는 것이 좋습니다.

그래서, 대신

println datetime 

의이 같은 것을 수행 할 수 있습니다

println datetimeformat.print(datetime) 

행운을 빕니다!

편집 : 변경

+0

사실'println (datetimeformat.print (datetime)) ' – pedrofurla

+0

감사합니다. @pedrofurla. –

1

기본 형식은 8601 날짜 - 시간을 나타내는 문자열을 생성/분석 할 때 java.time 클래스는 기본적으로 표준 ISO 8601 형식을 사용

ISO 정확히 동등한이 식을 수 있도록했다 값.

로컬 날짜 - 시간의 표준 형식은 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 내장 LocalDateTime 객체에 toString 방법 귀하의 전화 println(txn_post_date_hkt_date_parsed)는, 따라서 표준 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이 (가) 이전 날짜인지 확인하십시오. 역사의 똑같은 순간, 타임 라인상의 같은 지점이지만 두 가지 벽시계 (UTC 및 4 시간 33 분 후)를 통해 보았습니다.

끝에있는 Z은 표준 ISO 8601 표기이며, 약어는 Zulu이며 UTC를 의미합니다.

입력 : 2017년 1월 17일 1시 33분 0초

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

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

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

관련 문제