SimpledateFormat (“HH : MM AA”)와 함께 '23 : 00 PM '을 구문 분석하는 이유는 오전 11시입니까?

StackOverflow https://stackoverflow.com/questions/1154903

  •  18-09-2019
  •  | 
  •  

문제

왜 '23 : 00 pm '을 구문 분석하는 이유 SimpleDateFormat("hh:mm aa") 오전 11시?

도움이 되었습니까?

해결책

"23:00 pm"은 유효한 문자열이 아니지만 Java의 날짜/시간 시설은 다음과 같습니다. 허술한 기본적으로 날짜 구문 분석을 처리 할 때.

논리는 23:00 pm이 오후 11시 이후 12 시간이며 다음 날 오전 11시입니다. 당신은 또한 "4 월 31 일"과 같은 것들이 "5 월 1 일"(4 월 30 일 이후의 날)으로 구문 분석되는 것을 볼 수 있습니다.

이 동작을 원하지 않으면 SimpledateFormat에서 관대 한 속성을 False로 설정하십시오. DateFormat#setLenient (부울), 그리고 유효하지 않은 날짜/시간을 통과 할 때 예외가 나타납니다.

다른 팁

24 시간 시간을 구문 분석 할 경우 "HH : MM AA"를 형식으로 원합니다.

public static void main(String[] args) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
    final Date date = df.parse("23:00 PM");
    System.out.println("date = " + df.format(date));
}

출력

date = 23:00 PM

당신은 시도 했습니까? HH:mm aa?

HH 24 시간입니다 hh 12입니다.

다음은 다음에 지정된 서식 옵션입니다 Javadoc

H     Hour in day (0-23)    
k   Hour in day (1-24)  
K   Hour in am/pm (0-11)    
h   Hour in am/pm (1-12) 

"h"는 1-12 시간 동안 일 것입니다. 1-24를 처리하려면 "K"를 사용해보십시오. 0-23의 경우 "H"를 시도하십시오. 그러나 불가능한 데이터를 넣는 경우 유효한 결과를 기대하지 않습니다.

23:00 pm은 오전 11 시로 생각할 수 있습니다 다음날. JavaScript와 PHP는 거의 이와 같이 작동하지만 Java는 말할 수 없습니다.

나는 그것이 다음과 같은 일을한다고 생각합니다.

hours = hours % 12;

시간이 적절한 범위에 있는지 확인합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top