2017-11-24 15 views
1

다음 날짜 문자열을 yyyy-MM-dd HH : mm : ss 형식의 utc 시간으로 변환하려면 샘플 코드 블록이나 제안이 필요합니다.자바를 사용하여 사용자 정의 날짜 문자열 (am/pm 포함)을 UTC 날짜 시간으로 변환

샘플 날짜 문자열 : 2017년 11월 23일 오전 9시 44분

가 이런 유사한 질문이있다 그러나 모든

+1

이 작업을 수행해야합니다. DateTimeFormatter.ofPattern ("mm/dd/yyyy hh : mm a"); –

+2

@priyadarshiswain "M", "M", "Minute in hour" – suvartheec

+0

가능한 복제본 [Java8 DateTimeFormatter am/pm] (https://stackoverflow.com/questions/38250379/java8-datetimeformatter-am-pm- 오후). 나는 질문에 중복을 고려하지 말 것을 권한다. 연결된 질문에 소문자가있다./대답해라. 그러면 받아 들여지는 대답은 그것을 해결한다. 그래서 나는 왜 안 볼지 모른다. –

답변

0

SimpleDateFormat's javadoc 목록을 중복으로 내 테스트 데이터는이를 고려 해달라고 오전/pm.So PLS 함께 옵션으로 am/pm 표식에 "a"를 포함합니다.

는 경우에, 당신이 필요합니다 아래

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssa") 
+0

에 관한 질문이 아니거나 "MM/dd/yyyy hh : mm a"라는 질문을 정확하게 쓰지 않았다는 것을 알지 못했습니다. – suvartheec

+0

감사합니다. 수정 : –

0

샘플 코드가 제대로 변환을 수행해야합니다.

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateConversion { 

    public static void main(String[] argv) { 

     SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma"); 
     SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

     String sampleDateString = "11/23/2017 09:44am"; 

     try { 
      Date convertDate = formatter.parse(sampleDateString); 
      System.out.println(OutputFormatter.format(convertDate)); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

    } 

} 

구문 분석 할 날짜 문자열을 선언하는 것입니다.

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma"); 

및 출력 날짜는 물론

SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
0

처음에 당신은 적절한 패턴으로 SimpleDateFormat을 작성해야합니다. 이 클래스는 java.util.Date로 문자열 (more info here를) 구문 분석하는 데 도움이 :

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma"); 

원래 문자열 날짜가 특별한 시간대에있는 경우이 시간대 사용하는 파서를 지시해야합니다

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH); 

는 그런 다음 날짜로 문자열을 구문 분석해야합니다

Date d = sdf.parse("11/23/2017 09:44am"); 

가 Finnaly 당신이 UTC에 timezoned 날짜를 변환해야합니다.

전체 코드 노호 찾아주세요 :

public static void main(String[] args) throws ParseException { 
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH); 
    Date d = sdf.parse("11/23/2017 09:44am"); 
    System.out.println(toUtcZonedDateTime(d)); 
} 

public static ZonedDateTime toUtcZonedDateTime(final Date date) { 
    if (date == null) { 
     return null; 
    } 

    final ZoneId utcZone = ZoneOffset.UTC; 
    return ZonedDateTime.ofInstant(date.toInstant(), utcZone); 
} 

출력 :

2017-11-23T08:44Z 
+0

솔루션 주셔서 감사합니다.하지만 변환 된 utc 날짜 문자열로 원합니다. 그것을 할 방법이 있습니까? – user2392695

+0

java.util.Date를 String으로 변환하는 두 가지 옵션이 있습니다. 첫 번째는 사용할 수있는 날짜에 toString() 메서드를 사용하는 것입니다. 두 번째 옵션은 SimpleDateFormat을 만들고 사용하는 것입니다. String dateStr = sdf.format (date) – zappee

2

당신이 사용할 수있는 자바 8 time 패키지 :

String input = "11/23/2017 09:44am"; 
String format = "MM/dd/yyyy hh:mma"; 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); 
LocalDateTime date = LocalDateTime.parse(input, formatter); 
System.out.printf("%s%n", date); 

그러나 문제는이 소문자 'am'때문에 DateTimeParseException이 발생합니다.

나는 워드 프로세서를 찾았지만 메디안 지정자 처럼 소문자 'am'또는 'pm'을 구문 분석하는 표준 방법을 볼 수 없었다. You'll end up manually replacing them : 다음

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
    .parseCaseInsensitive() 
    .appendPattern(format) 
    .toFormatter(); 

을 수행 할 수 있습니다 : 코멘트에 @OleVV에서 언급 한 바와 같이

input = input.replace("AM", "am").replace("PM","pm"); 

, 당신은 구문 분석은 대소 문자를 구분해야하는 DateTimeFormatterBuilder를 사용하여 지정할 수 있습니다 이 포맷터를 LocalDateTime.parse 메소드의 인수로 사용하십시오.

provides a solution 위의 또 다른 대답은 소문자 변형으로 AM/PM 기호를 무시할 수 있다는 것입니다. 흥미롭게도

1


SimpleDateFormat 않습니다 지원 소문자 오전/오후의 분석.

+0

소문자 am/pm을 처리하는 방법 : (1) 구문 분석 전에 전체 문자열을 대문자로 변환하기 만하면됩니다 (다른 문자가 없으므로, 이것은 무해하다). (2)'DateTimeFormatterBuilder'를 사용하여 (a) 간단히 : 대소 문자를 구별하지 않는 파싱을 지정하십시오 (b) AM과 PM에 사용할 리터럴 문자열을 지정하십시오. –

+0

명시적인 로케일도 제공하는 것이 좋습니다. AM과 PM은 영어로 불려지므로 다른 언어는 다른 이름을 가질 수 있으므로 로케일이 지정된 모든 컴퓨터에서 코드가 작동하지 않을 수 있습니다. –