2009-07-08 1 views
1

私は、文字列形式の日付のmilisecond値を返すメソッドを作成しました。何らかの理由で、将来39000年の日付を与えています。なぜどんなアイデア?このコードは、なぜ私に将来39k年の日付を与えるのですか?

private long getTimeInMs(String currentStartTimeString) { 
     //String newDateString = currentStartTimeString.substring(6,10)+"-"+currentStartTimeString.substring(3, 5)+"-"+currentStartTimeString.substring(0, 2)+ "T" + currentStartTimeString.substring(11); 
     String newDateString = currentStartTimeString.substring(0,19); 
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

     long timeInMs; 
     try { 
      timeInMs = df.parse(newDateString).getTime(); 
     } catch (ParseException e) { 
      log.error("Failed to parse current Start Time",e); 
      return 0; 
     } 
     return timeInMs; 
    } 

私は日付文字列を入力すると、 "2009-07-07 10:51:01.15" それは実際に水8月6日である1246960261000 41484午前11時16分40秒を返しGMT + 0100(GMT夏時間)

これは、Javaのepocを越えてmsを与えているということで、私はUNIXの時代に対して評価していると思います...

+3

jodatimeの使用をお勧めします。手でJavaの日付を解析するのは地獄です。 –

+0

この場合、Jodaは何も簡単にしません。それでもフォーマットパターンを指定する必要があります。 – skaffman

+1

124960261000は、ミリ秒ではなく将来の39k年と判断されたときに、秒と解釈されていますか? – nos

答えて

17

私はあなたがUnixのtime_t値であるかのようにgetTime()から返された値を解釈したと思います。そうではありません - それは、Javaの時代を過ぎて数ミリ秒で、Unixの時代を過ぎてからです。

+1

私は思いますが、2つの時代は同じです。私がする必要があるのは、1000で割ることだけです。 –

4

私にはうまく見えます。 toStringの構文解析から「Tue Jul 07 10:51:01 BST 2009」(ここではイギリスのタイムゾーンにありますが、それは大きな違いはありません)に出てくるDateオブジェクトです。 124960261000のミリ秒値は正しいです、それは遠い未来に評価する理由はどう思いますか?どのように計算しましたか?

1

Java 6でコードを実行すると、私は正しいと分かる1246978261000を取得します。あなたは秒を見ている他人の提案を確認する

(:

System.out.println(new Date(timeInMs)); 

戻り

火7月7日午前10時51分01秒EDT 2009

編集ミリ秒ではない):

System.out.println(new Date(timeInMs*1000)); 

は、実際に

月に3月2日午前13時16分40秒EST 41485

+0

+1。 http://www.unixtimestamp.com/index.phpで1246960261000、次に1246960261を試してみてください – akarnokd

1

値が正しいことを、得られます。

(((((1246989061000/1000)/60)/60)/24)/365) 

39.54176373033992年与えます0が1970であることを正している。

関連する問題