SimpledateFormat (“HH : MM AA”)와 함께 '23 : 00 PM '을 구문 분석하는 이유는 오전 11시입니까?
-
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;
시간이 적절한 범위에 있는지 확인합니다.