2011-03-16 4 views
1

저는 java.sql.Timestamp를 가지고 있습니다. 나는 날짜를 자르고 12 시간 형식으로 보여주고 싶습니다. 예를 들어 (18 "06.0")하지만 난 절대 포기하지 않을 : 입력 문자열의 경우 :(hh : mm AM/PM)으로 java.sql.Timestamp를 포맷하는 방법

public static String formatTimestampAsTwelveHour(java.sql.Timestamp stamp){ 

     String stampString = stamp.toString(); 
     String hms = stampString.split(" ")[1]; 
     String[] hmsArray = hms.split(":"); 
     int hours = Integer.parseInt(hmsArray[0]); 
     int minutes = Integer.parseInt(hmsArray[1]); 
     int seconds = Integer.parseInt(hmsArray[2]);//just in case someone wants seconds 

     String suffix = ""; 
     if (hours > 12){ 
      hours = hours -12; 
      suffix = "PM"; 
     }else if (hours == 12){ 
      suffix = "PM"; 
     }else{ 
      suffix = "AM"; 
     } 
     String lessThanTen = ""; 
     if (minutes<10){ 
      lessThanTen = "0"; 
     } 
     return String.format("%i:%s%i %s", hours, lessThanTen,minutes, suffix); 

} 

내가 스레드에서 ("스레드-14"java.lang.NumberFormatException의를 예외를 얻을 : 42

) 오후 6시 42분 나는 시도 10 진수입니다.

답변

11

SimpleDateFormat의 서브 클래스는 당신이 원하는 않는 것입니다 당신이 SimpleDateFormat"h:mm a"을 사용할 수 있습니다, 그것을 자신을 구문 분석 할 필요가 없습니다.

DateFormat format = new SimpleDateFormat("h:mm a"); 
String str = format.format(timestamp); 

편집 : 다른 사람이 "K"형식으로 게시 한 버전은 0-11 사이의 시간을 반환합니다. 그러면 1-12가 반환되어 원하는 결과를 얻을 수 있습니다.

+2

+1은 Javadocs에 연결합니다. –

2

당신은 java.util.Date

2
public static String formatTimestampAsTwelveHour(java.sql.Timestamp stamp){ 

     java.util.Date date = new Date(stamp.getTime()); 
     SimpleDateFormat format = new SimpleDateFormat("your format here"); 
     return format.format(date); 

} 

Java는 이미 날짜 형식화 루틴을 제공하며, 독립적으로 요리하는 것보다 더 빠르고 더 잘 구현됩니다.

또한 Timestamp의 밀리 초 값을 사용하여 java.util.Date를 작성해야합니다. 특정 구현에서 Date 부모 클래스를 통해 Timestamp를 포맷하려고 시도 할 때 밀리 초와 관련하여 이상한 일이 발생하는 것으로 나타났습니다. .

+1

'java.sql.Timestap' *는'java.util.Date'입니다. 새 객체를 만들 필요가 없습니다. – Jonathan

+2

타임 스탬프를 충분히 사용하지 않았습니다. 타임 스탬프와 날짜의 작은 차이로 인해 identity, hashcodes 및 equals가 실패한 경우가 많이있었습니다. 그래서 지금은 나에게 제공되는 모든 타임 스탬프에서 Date를 구성합니다. –

+0

예, 저는 지금까지만 타임 스탬프를 사용했습니다. – davidahines

관련 문제