RFC에 명시된 바와 같이 이것은 1900-01-01T00 : 00 : 00 이후의 초입니다. 자바를 Long으로 변환하려면 기본 날짜를 1970-01-01T00 : 00 : 00으로 변경하고 1000을 곱하여 날짜를 얻습니다. 그런 다음이 값을 사용하여 새 날짜를 만들 수 있습니다.
소켓 입력 스트림을 DataInputStream에 랩핑하고 rfsOffset (정수를 사용)을 읽습니다.
int rfcOffset = -752253627; // Fri Apr 06 11:00:32 EDT 2012
// Current offsets will be negative convert to long positive value
long offsetSecs = rfcOffset + 4294967296L;
System.out.println(offsetSecs);
// Adjust time base from 1900 to 1970 and convert to millis
long offsetMillis = (offsetSecs - 2208988800L)* 1000L;
System.out.println(offsetMillis);
Date rfcDate = new Date(offsetMillis);
System.out.println(rfcDate.toString());
주 : 그럼 당신은 뭔가를 할 수있는 2036 시간까지이 유일한 작품은 밀리 세컨드의 일부 번호로 꺼집니다.
EDIT : RFC 868은 이전 프로토콜이므로 더 이상 동기화를위한 좋은 시간 원본으로 간주되지 않습니다. 좋은 시간 소스는 우리에게 NTP를 보내고 올바른 초를 반환합니다. 그것은 수 밀리 세컨드에서 벗어나지 만, 일반적으로 10 밀리 세컨드로 정확합니다. 많은 하드웨어 클럭이 상당히 많이 드리프트되며 NTP를 실행하는 경우에도 부정확 한 클록이있는 시스템에서 상당한 드리프트가 발생했습니다. NTP는 드리프트 클럭을 수정하지만 필요한 시프트를 결정하는 데 몇 분이 걸립니다. RFC 868은 오래되었으므로 배경 프로세스없이 휴대 전화의 시간을 가장 가까운 초로 설정할 수 있습니다. 휴대 전화가 제공 한 신호와 동기화 할 수 있으면 필요하지 않습니다.
왜 RFC 868인가 요즘 거의 모든 것이 NTP를 사용하고 있습니다 – Zoredache
@Zoredache : 네, 저도 동의합니다 ...이 프로토콜에 대해 배우고 싶습니다 ... –
32 비트가 4 바이트 (32/8).int 변수를 0으로 정의한 다음 루프마다 8 비트 씩 이동하고 스트림에서 다음 후속 바이트와 함께 비트 OR을 적용합니다. – ahanin