[java] 자바 : 유닉스 타임 스탬프 날짜
유닉스 타임 스탬프를 날짜 객체로 변환해야합니다.
나는 이것을 시도했다 :
java.util.Date time = new java.util.Date(timeStamp);
타임 스탬프 값은 다음과 같습니다. 1280512800
날짜는 “2010/07/30-22:30:00″이어야합니다 (PHP에서 얻을 때) Thu Jan 15 23:11:56 IRST 1970
. 대신을 얻습니다 .
어떻게해야합니까?
답변
의 경우 1280512800
1000 배가, 자바 이후의 밀리 초를 기대하고있다 :
java.util.Date time=new java.util.Date((long)timeStamp*1000);
이미 밀리 초가 있었다면 new java.util.Date((long)timeStamp);
로부터 문서 :
Date 객체를 할당하고 표준 시간 ( “epoch”, 1970 년 1 월 1 일 00:00:00 GMT) 이후 지정된 밀리 초 수를 나타내도록 초기화합니다.
답변
java.time
Java 8 은 날짜 및 시간 작업을위한 새로운 API 인 java.time 패키지를 도입했습니다 .
java.time을 사용하면 1970 년의 첫 번째 순간의 UTC 참조 1970-01-01T00 : 00Z 이후 전체 초 수를 구문 분석 할 수 있습니다. 결과는입니다 Instant
.
Instant instant = Instant.ofEpochSecond( timeStamp );
당신이 필요로하는 경우는 java.util.Date
아직 업데이트되지 예전의 코드와 상호 운용 할 수 java.time , 변환. 이전 클래스에 추가 된 새 변환 메소드를 호출하십시오.
Date date = Date.from( instant );
답변
이것이 올바른 방법입니다.
Date date = new Date ();
date.setTime((long)unix_time*1000);
답변
캘린더가 새로운 방법으로 보입니다.
Calendar mydate = Calendar.getInstance();
mydate.setTimeInMillis(timestamp*1000);
out.println(mydate.get(Calendar.DAY_OF_MONTH)+"."+mydate.get(Calendar.MONTH)+"."+mydate.get(Calendar.YEAR));
마지막 줄은 사용 방법의 예일뿐입니다. 예를 들어 “14.06.2012”가 인쇄됩니다.
System.currentTimeMillis ()를 사용하여 타임 스탬프를 저장 한 경우 “* 1000″부분이 필요하지 않습니다.
문자열에 타임 스탬프가 있으면 Long.parseLong (timestamp)와 같이 먼저 긴 구문을 구문 분석해야합니다.
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
답변
tl; dr
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18 : 00 : 00Z
java.time
Java 8 이상에 내장 된 새로운 java.time 프레임 워크는 Joda-Time의 후속 버전입니다.
이 새로운 클래스에는 신기원에서 초 단위의 수를 변환 하는 편리한 팩토리 메소드가 포함되어 있습니다. 당신은 얻을 Instant
, 나노초 해상도까지와 UTC의 타임 라인에 잠시.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString () : 2010-07-30T18 : 00 : 00Z
해당 코드가 IdeOne.com에서 실시간으로 실행되는지 확인하십시오 .
Asia/Kabul
또는 Asia/Tehran
시간대?
여기에 표시된 18:00 대신 22:30의 시간 값을 얻는 것으로보고되었습니다. PHP 유틸리티가 UTC에서 조정하기 위해 기본 시간대를 암시 적으로 적용하고 있다고 생각합니다. 내 값은 UTC이며 Z
(약칭 은 UTC를 의미)로 표시됩니다 Zulu
. 컴퓨터의 OS 나 PHP로 설정 한 모든 기회 Asia/Kabul
또는 Asia/Tehran
시간대? 나는 당신 IRST
이 당신의 산출물에이란 시간을 의미 한다고보고한다고 가정 합니다. 현재 2017 년 에는 UTC보다 4 시간 30 분 빠른 서머 타임으로 운영 되는 유일한 영역 입니다.
지정 적절한 시간대 이름 의 형식 continent/region
예컨대, America/Montreal
, Africa/Casablanca
, 또는 Pacific/Auckland
. 3-4 문자 약어를 사용하지 마십시오 같은 EST
하거나 IST
또는 IRST
그들이 있습니다로 하지 진정한 시간대가 아닌 표준화, 심지어 고유하지 않은 (!).
당신이 경우 원하는 특정 지역의 시간대의 렌즈를 통해 당신의 순간을보고하는 적용 ZoneId
를 얻을 ZonedDateTime
. 여전히 같은 순간이지만 다른 벽시계 시간 으로 보입니다 .
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22 : 30 + 04 : 30 [아시아 / 테헤란]
java.time에서 레거시 클래스로 변환
새로운 java.time 클래스를 사용해야합니다. 그러나 필요한 경우 오래된 것으로 변환 할 수 있습니다.
java.util.Date date = java.util.Date.from( instant );
조다 타임
업데이트 : Joda-Time 프로젝트는 이제 유지 관리 모드 에 있으며 팀은 java.time 클래스 로의 마이그레이션을 조언합니다 .
참고로 Joda-Time DateTime 의 생성자 는 비슷합니다. 1000을 곱하여 long
( int
! 아님) 를 생성하십시오 .
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
악명 높은 번거로운 java.util.Date 및 .Calendar 클래스를 피하는 것이 가장 좋습니다. 그러나 날짜를 사용해야하는 경우 Joda-Time에서 변환 할 수 있습니다.
java.util.Date date = dateTime.toDate();
java.time에 대하여
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이 필요없고 수업이 필요 없습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
- 자바 SE 8 , 자바 SE 9 , 나중에
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- 대부분의 java.time 기능은 ThreeTen-Backport의 Java 6 & 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스의 최신 버전의 Android 번들 구현.
- 이전 Android (<26)의 경우 ThreeTenABP 프로젝트 는 위에서 언급 한 ThreeTen-Backport를 채택합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
답변
Date의 생성자는 timeStamp 값이 밀리 초일 것으로 예상합니다. 타임 스탬프의 값에 1000을 곱하면 생성자가 전달됩니다.
답변
다른 머신에서 타임 스탬프 값을 변환하는 경우 해당 머신의 시간대도 확인해야합니다. 예를 들어;
EST 또는 UTC 시간대로 실행하는 경우 위의 선언으로 인해 다른 날짜 값이 발생합니다.
시간대를 설정하려면 일명 UTC로 간단히 재 작성할 수 있습니다.
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));