2013-07-15 4 views
3

나는 몇 타임 스탬프 형식을 가지고GWT에서 미래의 타임 스탬프 값을 찾는 방법은 무엇입니까?

타임 스탬프 형식은 YYYY MM DD시 분 SS의 S의 AM/PM COUNTRYNAME/CityName이 (영역) 나 타임 스탬프 값에 대한 유효성 검사를 수행 할

YYYY-MM-DD HH:mm:ss.S 
YYYY-MM-DD HH:mm:ss.S AM/PM 
YYYY-MM-DD HH:mm:ss.S AM/PM z 
YYYY-MM-DD HH:mm:ss.z 

, 만약 타임 스탬프를 포함 값이 미래 값 (또는 기존 값보다 큼)이면 사용자에게 show.notification 메시지를 표시하려고합니다.

나는 미래 일자

DateTimeFormat df = DateTimeFormat.getFormat(dateFormat); 
     Date updateDate = df.parseStrict(newDateValue); 
     Date synchronizedDate = df.parseStrict(synchronizedDB_DateValue); 
     boolean isFutureDate = updateDate.after(synchronizedDate); 
     if (isFutureDate) { 
      // send notification 
     } 
     else { 
      // do nothing 
     } 

EDIT 확인하기 위해 노력하고 다음 코드를 작성한 날짜 형식의

: 코드에 따라

는 타임 스탬프 형식 작동 = YYYY-MM-DD HH를 : mm : ss.S

   String timestampFormat = "YYYY-MM-DD HH:mm:ss.S"; // It works 
       //String timestampFormat = "YYYY-MM-DD HH:mm:ss.S AM/PM"; 
       //String timestampFormat = "YYYY-MM-DD HH:mm:ss.S AM/PM z" 
       //String timestampFormat = "YYYY-MM-DD HH:mm:ss.S z "; 

       String newTimestampFormat= timestampFormat.replaceAll("-", "."); 
       newTimestampFormat = newTimestampFormat.replace("YYYY", "yyyy"); 
       newTimestampFormat = newTimestampFormat.replace("AM/PM", "a"); 

       DateTimeFormat df = DateTimeFormat.getFormat(newTimestampFormat); 
       Date updateDate = df.parse(newTimeStampValue); // UPDATED VALUE = 2013.08.21 00:00:00.123 

       Date synchronizedDate = df.parseStrict(synchronizedDB_DateValue); // current or old db value = 2013.07.11 00:00:00.123 

       boolean isFutureTimestamp = updateDate.after(synchronizedDate); 
       if (isFutureTimestamp) { 
        // send notification 
       } 
       else { 
        // do nothing 
       } 

다른 모든 타임 스탬프 형식에 대해 변경해야 할 사항은 무엇입니까?

미리 감사드립니다.

+0

가 (당신이 [DateTimeFormat] 봤어 http://www.gwtproject.org/javadoc/latest/com/google/gwt/i18n/shared /DateTimeFormat.html)? –

+0

@BorisBrudnoy 예, 미래의 데이터를 확인하는 데 사용됩니다. 업데이트 된 질문 – StackOverFlow

+0

정규식보기 (예 :'myTimestampString.matches (tsRegex)')? –

답변

2

이 내 솔루션이며 그것은 작동 :)

private boolean function isFutureTimestamp(){ 
     String gwtTimestampFormat = convertToGwtTimeStampFormat(timestampFormat); 
     // timestampFormat = YYYY-MM-DD HH:mm:ss.S AM/PM z 
     // gwtTimestampFormat = yyyy.MM.dd HH:mm:ss.S a z 

     DateTimeFormat df = DateTimeFormat.getFormat(gwtTimestampFormat); 

     String newlyUpdatedTimestampValue = convertToGwtTimeStampFormat(timestampValue); 
     Date updatedDateTime = df.parse(newlyUpdatedTimestampValue); 

     String currentTimestamp = convertToGwtTimeStampFormat(currentTimestampValue); 
     Date currentDateTime = df.parse(currentTimestamp); 

     boolean isFutureTimestamp = updatedDateTime.after(currentDateTime); 
     return isFutureTimestamp; 
} 

    private String convertToGwtTimeStampFormat(String gwtTimestampFormat) { 

     if (gwtTimestampFormat != null && gwtTimestampFormat.length() > 20) { // "2012-12-23 23:12:32.2".length= 21 
      gwtTimestampFormat = gwtTimestampFormat.replace("-", "."); 
      gwtTimestampFormat = gwtTimestampFormat.replace("YYYY", "yyyy"); 
      gwtTimestampFormat = gwtTimestampFormat.replace("DD", "dd"); 
      gwtTimestampFormat = gwtTimestampFormat.replace("AM/PM", "a"); 
      return gwtTimestampFormat; 
     } 
     else { 
      return ""; 
     } 
    } 
1

Apache DateUtils를 사용해보십시오. (doc is here)

다양한 형식을 지원하므로 parseDate 메서드를 사용하면 많은 다른 장소에서도 사용할 수 있습니다. 예를 들어

다음과 같은 방법에 문자열 배열로 모든 타임 스탬프 패턴을 공급할 수 parseDate를 사용하는 동안 :

public static Date parseDate(String str, String[] parsePatterns) throws ParseException 

날짜 객체를받을 수 있습니다. 그리고 이것으로 당신은 당신이 번호를 비교처럼 날짜를 비교할 수 있습니다

public static int truncatedCompareTo(Date date1, Date date2, int field) 

첫 번째 날짜가 두 번째보다 작은 같거나 큰 경우로이 당신에게 음의 정수, 제로, 또는 양의 정수를 반환합니다 .

이러한 메서드는 이므로 DateUtils 개체를 만들지 않고도 이러한 메서드를 호출 할 수 있습니다. 항아리가 import이되면 일단 DateUtils.yourMethod(yourArgs)을 사용하십시오.