2017-11-02 7 views
0

"long"유형의 날짜가 있으며 유효성을 검사하려고합니다. 그것은 xml 파일에서 다른 곳으로 변환되었습니다.Java에서 long으로 유효성을 검사하는 방법

  • XML 파일 날짜 : 2018-01-35T00 : 00 + 02 : 00
  • 긴 날짜 : 1517695200000L

이 날짜 (2018-01-35 YYYY-MM-DD 등)가해야 날짜가 잘못되었습니다.

How to sanity check a date in java 내가 날짜에 긴 변환하지만 이미 2018년 2월 4일에 2018-01-35에서 날짜를 변경 때문에 발생 예외가 없었다 :

나는 이미 주어진 솔루션을 시도했다. 이것은 완전한 코드입니다 :

long longDate = 1517695200000L; 
Date date = new Date(longDate); 
System.out.println("long: " + longDate); 
System.out.println("Date: " + date); 
Calendar cal = Calendar.getInstance(); 
cal.setLenient(false); 
cal.setTime(date); 

try { 
    cal.getTime(); 
} catch (Exception e) { 
    LOG.error("invalid date"); 
    return false; 
} 

이 "자체 유효성 검사"가없이 긴 날짜를 변환 할 수있는 가능성이 있습니까? 아니면 다른 사람에게 아이디어가 있습니까? 미리 감사드립니다.

+4

당신은 2018-01-35를 얻기 위해 당신의 긴 것을 어떻게 변화시켜야하는지 명확히해야 할 것입니다. –

+2

이'long '값이'Date.getTime()'을 통해 얻어 졌다면, 그것은 단지 유닉스 시대 이후의 밀리 세컨드입니다. 그래서 항상 유효합니다. 사실,'Date' 자체는 항상 유효 할 것입니다 ... 당신이 보여주지 않은 * text * 변환에 대해 더 엄격해질 필요가있는 것처럼 들립니다. 2018-01-35는 긴 표현이 아닌 텍스트 표현입니다. –

+0

아마도 long은 20180135L입니다. –

답변

2

long은 임의의 날짜 (1970 년) 이후의 초 수입니다. 그래서 항상 유효한 날짜가됩니다. 과거의 세계를 생각해보십시오. 또는 10000 년은 믿을 수 없으며 yyyy와 비교할 수 없습니다.

3

날짜를 확인하려면 XML의 문자열이 필요합니다.

String xmlFileDate = "2018-01-35T00:00+02:00"; 
    try { 
     OffsetDateTime.parse(xmlFileDate); 
    } catch (DateTimeParseException dtpe) { 
     System.err.println("Invalid date"); 
    } 

내가 당신의 날짜 - 시간 문자열 ISO 8601 형식, 현대 자바 날짜와 시간 클래스는 기본으로 구문 분석하는 형식으로되어 있다는 사실을 이용하고있다 : 당신은 얼마나 알고 그 다음은 아주 간단합니다.

날짜 - 시간이 1517695200000L으로 변환 된 후 유효하지 않은 날짜 - 시간 문자열에서 왔음을 알 수있는 방법이 없으므로 그 시점에서 할 수있는 일이 없습니다. Jon Skeet과 AxelH가 이미 의견에서 말했듯이 long은 항상 유효한 날짜를 나타냅니다.

+0

@Lea 불행히도, 당신이 말했듯이 불행히도 그 기간 동안 만 작동 할 수는 있지만 이미 오래전부터 "손상된"경우 XML 파서를 재정의하거나 파서가 날짜를 무효화하도록 구성 할 수 없는지 확인해야합니다. 그것은해야한다 ...). 이 시나리오에서 – AxelH

+0

형식은 ISO-8859-1이지만 주어진 XML 파일에 따라 UTF-8이 될 수도 있습니다. – Lea

+2

@Lea는 문자 인코딩 또는 문자셋입니다. XML 파일이 두 경우 모두 올바르게 읽혀질 수 있다면'2018-01-35T00 : 00 + 02 : 00'을 얻은 시점까지는 신경 쓸 필요가 없으며 날짜/시간 문자열 형식은 여전히 ISO 8601입니다. –