Java에서 Long을 현재로 변환하면 1970이 반환됩니다.
웹 서비스에서 다운로드한 긴 값(예: 1220227200, 1220832000, 1221436800...)을 가진 목록이 있습니다.날짜로 변환해야 합니다.불행히도 다음과 같은 방법이 있습니다.
Date d = new Date(1220227200);
1970년 1월 1일을 반환합니다.제대로 변환할 다른 방법 아는 사람?
생성자(링크 클릭!)는 시간을 다음과 같이 받아들입니다.long
초단위가 아닌 밀리초단위로 표시됩니다.1000을 곱해서 다음과 같이 공급해야 합니다.long
.
Date d = new Date(1220227200L * 1000);
여기 보면
2008년 8월 31일 (일)20:00 GMT-04:00
dr;dr
java.time.Instant // Represent a moment as seen in UTC. Internally, a count of nanoseconds since 1970-01-01T00:00Z.
.ofEpochSecond( 1_220_227_200L ) // Pass a count of whole seconds since the same epoch reference of 1970-01-01T00:00Z.
데이터 인식
옛날부터 사람들은 시간을 추적하는 데 다양한 정밀도를 사용합니다.따라서 에폭 이후 카운트로 해석할 숫자를 얻을 때는 다음 사항을 결정해야 합니다.
- ★★★★★★★★★★★★★★★★★★?
많은 에폭스 날짜가 다양한 시스템에서 사용되어 왔다.일반적으로 사용되는 것은 POSIX/Unix 시간이며, 여기서 에폭은 UTC에서 1970년의 첫 순간입니다.하지만 이 시대를 가정해서는 안 된다. - ★★★★★★★★★★★★★★★★?
에폭스 이후의 초, 밀리초, 마이크로초, 나노초 중 어느 쪽을 말하는 것입니까? - 몇몇??
일반적으로 에폭은 UTC/GMT 시간대이기 때문에 카운트됩니다.즉, 시간대 오프셋은 전혀 없습니다.그러나 경험이 없거나 날짜를 모르는 프로그래머가 관여하는 경우 암묵적인 시간대가 있을 수 있습니다.
다른 사람들이 지적한 바와 같이, 당신의 경우, 당신은 Unix 시대 이후 몇 초가 주어진 것 같습니다.단, 이 초수를 밀리초를 예상하는 컨스트럭터에게 전달하고 있습니다.그래서 해결책은 1,000을 곱하는 것입니다.
얻은 교훈:
- 수신한 데이터의 의미를 판단합니다(추정하지 마십시오).
- 문서를 읽습니다.
데이터
데이터는 몇 초 안에 완료되는 것 같습니다. UTC 시간대가 됩니다1,220,227,200
의 첫 입니다.
조다 타임
java.util.날짜 및.Java에 번들된 캘린더 클래스는 귀찮기로 악명 높습니다.그들을 피하세요.대신 Joda-Time 라이브러리 또는 Java 8에 번들된 새로운 java.time 패키지를 사용합니다(Joda-Time에서 영감을 얻음).
J.U.와는 달리 주의하세요.날짜, Joda-Time의 a는 할당된 자신의 시간대를 정확히 알고 있습니다.따라서 다음에 나타내는 Joda-Time 2.4 코드 예에서는 먼저 기본 UTC를 사용하여 밀리초를 해석합니다.다음으로 파리의 시간대를 조정한다.우주의 시간대에서 같은 순간이지만 벽시계는 다르다.데모를 위해 UTC에 맞춰 다시 조정합니다.거의 항상 암묵적인 기본값(대부분 날짜 작업 시 문제의 원인)에 의존하지 말고 원하는 시간대 또는 예상되는 시간대를 명시적으로 지정하는 것이 좋습니다.
날짜 시간몇 초 동안 입력한 값에 천을 곱하면 됩니다. 64비트여야 .long
32비트 이기 int
.
long input = 1_220_227_200L; // Note the "L" appended to long integer literals.
long milliseconds = ( input * 1_000L ); // Use a "long", not the usual "int". Note the appended "L".
이 시간(밀리초)을 생성자에 공급합니다.이 특정 컨스트럭터는 이 카운트가 Unix Epoch of 1970이라고 가정합니다.따라서 시공 후 원하는 시간대를 조정하십시오.
대륙과 도시/지역의 조합인 적절한 시간대 이름을 사용합니다.다음과 같은 서너 개의 문자 코드를 사용하지 마십시오.EST
표준화되지도 않고 독특하지도 않기 때문입니다.
DateTime dateTimeParis = new DateTime( milliseconds ).withZone( DateTimeZone.forID( "Europe/Paris" ) );
데모를 위해 시간대를 다시 조정합니다.
DateTime dateTimeUtc = dateTimeParis.withZone( DateTimeZone.UTC );
DateTime dateTimeMontréal = dateTimeParis.withZone( DateTimeZone.forID( "America/Montreal" ) );
콘솔에 덤프합니다.유럽에서는 새로운 날이 시작되었지만 미국에서는 아직 새로운 날이 시작되지 않았기 때문에 Montréal에서는 날짜가 어떻게 다른지 주목하십시오.
System.out.println( "dateTimeParis: " + dateTimeParis );
System.out.println( "dateTimeUTC: " + dateTimeUtc );
System.out.println( "dateTimeMontréal: " + dateTimeMontréal );
달릴 때.
dateTimeParis: 2008-09-01T02:00:00.000+02:00
dateTimeUTC: 2008-09-01T00:00:00.000Z
dateTimeMontréal: 2008-08-31T20:00:00.000-04:00
java.time
Joda-Time의 제조사는 가능한 한 빨리 대체품인 java.time 프레임워크로 이행해 달라고 요청했습니다.반면 Joda-Time이 적극적으로 지지되는 것을 계속한 모든 미래의 발전은 ThreeTen-Extra 프로젝트에 있는 java.time 등급과 확장에 끝마쳐 질 것이다.
그 java-time 체계 합동 전략 검토한 310에 의해 자바 8시와 후에 장착되어 정의된다.그 java.time 수업 자바 6및, 7ThreeTen-Backport 과제를 안드로이드에 ThreeTenABP 프로젝트에 back-ported 왔다.
시간 표시 막대에 협정 세계시에 나노초의 해상도를 가진 인스턴트는 순간이었다.1970년 협정 세계시에 있는 그것의 시대는 첫 순간이었습니다.
Instant instant = Instant.ofEpochSecond( 1_220_227_200L );
한 OffsetDateTime을 가져오기 위한 offset-from-UTC ZoneOffset을 가한다.
알 수 있을 경우 더 나은 것은, 한 ZonedDateTime하게 하기 위해서는 시간대 ZoneId 적용된다.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
당신이 있었으면 하고 있고, 안 밀리초처럼 보인다.날짜가 생성자 millis 있고, 그래서 시간이 걸린다.
Date d = new Date(timeInSeconds * 1000);
오직 공장에서 달력 개체에 시간을 정하다.
Calendar c = Calendar.getInstance();
c.setTimeInMillis(1385355600000l);
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH));
System.out.println(c.get(Calendar.DAY_OF_MONTH));
// get Date
System.out.println(c.getTime());
초와java 새로운 Date(오래)생성자에 필요한 밀리초에 있지 않은 그분들 아마도 타임 스탬프 및.그냥 1000배로라는 사람은 괜찮고 것을 곱하면 된다.
그 긴 가치, 십중팔구 Epoch 타임 스탬프 및, 값은:일치한다.
1220227200)엄마, 012008년 9월 00:00시 GMT.
1220832000)엄마, 082008년 9월 00:00시 GMT.
1221436800)엄마, 152008년 9월 00:00시 GMT.
이 긴 값은 java.util로 변환할 수 있습니다.java.util 사실을 고려한 날짜.Date는 미리 암시한 것처럼 밀리섹을 사용하지만 일부 결함이 있습니다.
// note: enforcing long literals (L), without it the values would just be wrong.
Date date = new Date(1220227200L * 1000L);
이제 날짜를 올바르게 표시하려면 java.text를 사용할 수 있습니다.DateFormat(날짜 형식)은 다음과 같습니다.
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("Wrong date time value: " + date);
System.out.println("Correct date time value: " + df.format(date));
다음은 java.util로 변환된 긴 값을 표시한 결과입니다.DateFormat을 사용하지 않는 날짜:
Date wrong (off by 2 hours): Mon Sep 01 02:00:00 CEST 2008
Correct date : Monday, 1 September 2008 00:00:00 o'clock UTC
이것을 시험해 보세요.
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(1220227200 * 1000);
System.out.println(cal.getTime());
날짜 형식을 조정하면서 시도해 보십시오.
long longtime = 1212580300;
SimpleDateFormat dateFormat = new SimpleDateFormat("MMddyyHHmm");
Date date = (Date) dateFormat.parseObject(longtime + "");
System.out.println(date);
주의: 24시간 또는 12시간 사이클을 확인하십시오.
1220227200은 1980년 1월 15일에 대응합니다(그리고 실제로 새로운 날짜(1220227200).toString()은 "Thu Jan 15 03:57:07 CET 1970"을 반환합니다).긴 값을 1970년 1월 1일 이전에 전달하면 실제로는 1970년 1월 1일이 반환됩니다.값이 이 상황(82800000보다 작음)에 있지 않은지 확인합니다.
새 날짜(숫자)는 다음 날짜를 반환합니다.number
1970년 1월1일 이후 밀리초날짜 형식이 1970년 1월 1일 이후임을 알 수 있는 시간, 분, 초를 표시하지 않을 수 있습니다.
올바른 해석 라우팅에 따라 날짜를 해석해야 합니다.1220227200이 뭔지는 모르겠지만 1970년 1월 1일 이후 초라면 곱해서 밀리초를 산출합니다.그렇지 않으면 1970년 이후 밀리초로 변환합니다(java.util을 계속 사용하려면).날짜).
저는 좋아요.1970년 1월1일부터 밀리초를 통과해야 하기 때문에 1000을 곱하는 것이 좋습니다.
왜냐하면 1220227200 ms = 338,952 시간.java.201 이기 때문입니다.Date에 생성자 new Date(Long milliseconds) - "epoch"로 알려진 표준 기본 시간 이후 지정된 밀리초(즉, 1970년 1월 1일 00:00 GMT)를 나타내도록 Date 개체를 할당하고 초기화합니다. 따라서 1초 = 1000밀리섹만 기억하십시오.
언급URL : https://stackoverflow.com/questions/7487460/converting-long-to-date-in-java-returns-1970
'programing' 카테고리의 다른 글
React.js: 내부 설정HTML vs 위험 SetInnerHTML (0) | 2022.09.26 |
---|---|
MySQL LAG/LEAD 문제 (0) | 2022.09.26 |
Javascript 스왑 어레이 요소 (0) | 2022.09.26 |
PHP에서 Excel 파일 읽기 (0) | 2022.09.26 |
잘못된 이름으로 이 개체 속성에 액세스하려면 어떻게 해야 합니까? (0) | 2022.09.26 |