문제

다음과 같은 일이 발생하는 이유를 이해할 수 없습니다.

String date = "06-04-2007 07:05";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm");
Date myDate = fmt.parse(date); 

System.out.println(myDate);  //Mon Jun 04 07:05:00 EDT 2007
long timestamp = myDate.getTime();
System.out.println(timestamp); //1180955100000 -- where are the milliseconds?

// on the other hand...

myDate = new Date();
System.out.println(myDate);  //Tue Sep 16 13:02:44 EDT 2008
timestamp = myDate.getTime();
System.out.println(timestamp); //1221584564703 -- why, oh, why?
도움이 되었습니까?

해결책

몇 밀리초?첫 번째 예에서는 분 정보만 제공하는 반면, 두 번째 예에서는 밀리초 단위로 시스템에서 현재 날짜를 가져옵니다. 찾고 있는 정보는 무엇입니까?

String date = "06-04-2007 07:05:00.999";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S");
Date myDate = fmt.parse(date);

System.out.println(myDate); 
long timestamp = myDate.getTime();
System.out.println(timestamp);

다른 팁

위의 내용에 동의합니다. 밀리초가 있어서는 안 됩니다...

지정한 단순 날짜 형식이 밀리초를 삭제하기 때문입니다.따라서 결과 Date 객체에는 해당 정보가 없습니다.따라서 인쇄하면 모두 0이 됩니다.

반면에 Date 개체에 밀리초 단위의 값을 할당하면(이 경우 new Date() 사용) 밀리초가 유지됩니다.따라서 인쇄하면 밀리초도 포함됩니다.

Sun JDK 시간/날짜 라이브러리(아쉬운 점이 많음)를 사용하는 대신 다음을 살펴보는 것이 좋습니다. http://joda-time.sourceforge.net.

이것은 매우 성숙하고 활동적인 sourceforge 프로젝트이며 매우 우아한 API를 가지고 있습니다.

날짜를 구문 분석하면 귀하가 제공한 정보만 사용됩니다.이 경우 MM-dd-yyyy HH:mm만 알고 있습니다.

새 날짜 객체를 생성하면 현재 시스템 날짜/시간(에포크 이후의 밀리초 수)이 반환됩니다.

Date 객체의 toString()은 밀리초를 표시하지 않습니다...하지만 그들은 거기에 있습니다

따라서 new Date()는 다음에서 볼 수 있듯이 밀리초 해상도의 개체입니다.

  System.out.printf( "ms = %d\n", myDate.getTime() % 1000 ) ;

그러나 SimpleDateFormat을 사용하여 날짜를 구성하면 밀리초가 전달되지 않습니다.

여기에 질문이 없나요?

[편집] 하하하...너무 느리네요 ;)

Date.getTime은 Date 객체가 나타내는 1970년 1월 1일 00:00:00 GMT 이후의 밀리초 수를 반환합니다.따라서 "06-04-2007 07:05" - "01-01-1970 00:00"은 1180955340000 밀리초와 같습니다.질문의 유일한 관심사는 날짜의 시간 부분이므로 이 계산을 대략적으로 생각하는 방법은 07:05에서 00:00 사이의 밀리초 수(25500000)입니다.두 시간 모두 밀리초가 없으므로 이는 1000으로 균등하게 나눌 수 있습니다.

두 번째 날짜에서는 해당 코드 줄이 실행되는 현재 시간을 사용합니다.현재 초 이후의 현재 밀리초가 계산에 사용됩니다.따라서 Date.getTime은 1000으로 균등하게 나누어지지 않는 숫자를 반환할 가능성이 높습니다.

그만큼 getTime() 의 방법 Date 1970년 1월 1일(모든 컴퓨터 날짜가 이 날짜를 기준으로 하기 때문에 이 날짜를 "에포크"라고 함) 이후의 밀리초 수를 반환합니다.그래야 한다 ~ 아니다 사람이 읽을 수 있는 날짜 버전을 표시하는 데 사용됩니다.

사용 SimpleDateFormat.format() 대신 방법.다음은 문제를 해결할 수 있다고 생각되는 코드 일부의 수정된 버전입니다.

String date = "06-04-2007 07:05:23:123";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S");
Date myDate = fmt.parse(date); 

System.out.println(myDate);  //Mon Jun 04 07:05:23 EDT 2007
String formattedDate = fmt.format(myDate);
System.out.println(formattedDate); //06-04-2007 07:05:23:123
import java.util.*;

public class Time {
    public static void main(String[] args) {
        Long l = 0L;
        Calendar c = Calendar.getInstance();
        //milli sec part of current time
        l = c.getTimeInMillis() % 1000;  
        //current time without millisec
        StringBuffer sb = new StringBuffer(c.getTime().toString());
        //millisec in string
        String s = ":" + l.toString();
        //insert at right place
        sb.insert(19, s);
        //ENJOY
        System.out.println(sb);
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top