>  기사  >  데이터 베이스  >  UNIX 타임스탬프를 변환할 때 SimpleDateFormat.parse가 예기치 않은 출력을 생성하는 이유는 무엇입니까?

UNIX 타임스탬프를 변환할 때 SimpleDateFormat.parse가 예기치 않은 출력을 생성하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-27 16:26:29708검색

Why Does SimpleDateFormat.parse Produce Unexpected Output When Converting UNIX Timestamps?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.