집 >데이터 베이스 >MySQL 튜토리얼 >UNIX 타임스탬프를 변환할 때 SimpleDateFormat.parse가 예기치 않은 출력을 생성하는 이유는 무엇입니까?
SimpleDateFormatter.parse의 다양한 출력 형식
Java 프로그램에서 SimpleDateFormat 클래스는 날짜를 지정된 형식으로 변환하는 데 사용됩니다. 그러나 경우에 따라 SimpleDateFormatter.parse를 사용하여 날짜를 구문 분석하면 형식 지정 중에 지정된 형식과 다른 형식이 발생할 수 있는 것으로 관찰되었습니다.
이 문제는 UNIX 타임스탬프를 날짜 문자열로 변환할 때 발생합니다. 다음은 간단한 예입니다.
<code class="java">String ep ="a1527069600"; Long epoch = Long.parseLong(ep.substring(1, ep.length())); Date dt = new Date(epoch*1000L); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); System.out.println("SDF.Format - "+sdf.format(dt)); System.out.println("SDF.parse - "+sdf.parse(sdf.format(dt)));</code>
이 예에서 sdf에 지정된 형식은 "dd/MM/yyyy hh:mm:ss a"이지만 sdf.parse의 출력은 다른 형식입니다. , "5월 23일 수요일 15:30:00 IST 2018."
솔루션
이 문제를 해결하려면 날짜 문자열을 MySQL 데이터베이스에 전달하지 마십시오. 대신 날짜 객체를 사용하세요. Java는 최신 날짜 및 시간 처리를 위한 java.time API를 제공합니다. 특정 시나리오의 경우 LocalDateTime 개체를 사용할 수 있습니다.
<code class="java"> String ep ="a1527069600"; long epoch = Long.parseLong(ep.substring(1)); Instant inst = Instant.ofEpochSecond(epoch); LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime(); PreparedStatement ps = myDatabaseConnection.prepareStatement( "insert into my_table (my_date_time) values (?)"); ps.setObject(1, ldt);</code>
이 접근 방식은 일관된 날짜 형식을 보장하고 SimpleDateFormatter.parse에서 발생하는 구문 분석 문제를 제거합니다.
위 내용은 UNIX 타임스탬프를 변환할 때 SimpleDateFormat.parse가 예기치 않은 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!