2017-02-20 10 views
0

私はMongoDBデータベースにタイムスタンプを持っていて、読みやすい日付形式でプリントしたいと思います。私は、次のコードを持ってJavaMongoClientの使用:MongoDBタイムスタンプのフォーマット

import com.mongodb.MongoClient; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoCursor; 
import com.mongodb.client.MongoDatabase; 
import org.bson.Document; 

import java.sql.Timestamp; 

public class MongoDBTest 
{ 
    public static void main(String[] arguments) 
    { 
     MongoClient client = new MongoClient("127.0.0.1", 27017); 
     String databaseName = "my_database"; 
     MongoDatabase database = client.getDatabase(databaseName); 
     String collectionName = "my_collection"; 
     MongoCollection collection = database.getCollection(collectionName); 

     try (MongoCursor<Document> cursor = collection.find().iterator()) 
     { 
      while (cursor.hasNext()) 
      { 
       String json = cursor.next().toJson(); 
       Document document = Document.parse(json); 
       String stringTimestamp = document.get("timestamp").toString(); 
       Timestamp timestamp = new Timestamp(Long.parseLong(stringTimestamp)); 
       System.out.println("Timestamp: " + stringTimestamp + " Formatted: " + timestamp); 
      } 
     } 
    } 
} 

印刷されたタイムスタンプは、彼らが1970からすべてのですが、すべきではないので、正しいとは思えません。

Timestamp: 1357466440 Formatted: 1970-01-16 18:04:26.44 
Timestamp: 1357466449 Formatted: 1970-01-16 18:04:26.449 
Timestamp: 1357466457 Formatted: 1970-01-16 18:04:26.457 
Timestamp: 1357466462 Formatted: 1970-01-16 18:04:26.462 
Timestamp: 1357466469 Formatted: 1970-01-16 18:04:26.469 
Timestamp: 1357466469 Formatted: 1970-01-16 18:04:26.469 
Timestamp: 1357466477 Formatted: 1970-01-16 18:04:26.477 
Timestamp: 1357466477 Formatted: 1970-01-16 18:04:26.477 

私が手にするにはどうすればよいです「本物の」フォーマットされた日付?

答えて

1

timestampの値が秒単位で表示されます。 1000を掛けてミリ秒単位で入力します。

String stringTimestamp = document.get("timestamp").toString(); 
Timestamp timestamp = new Timestamp(Long.parseLong(stringTimestamp) * 1000); 
Instant instant = timestamp.toInstant(); 

ここからDateTimeFormatterを使用してフォーマットできます。あなたの必要性に応じて、あなたはまた、MongoDB documentationパーLocalDateTime

1

に変更することができます。

BSON日はUnixエポック(1970年1月1日)以降 ミリ秒数を表し、64ビットの整数です。これにより、 の表示可能な日付範囲は過去約2億9000万年、将来は となります。

は、例えば、ISODateを返すようにISODate("2012-10-15T21:26:17Z")をシェルのgetTimestamp()機能を使用します。

ObjectId.prototype.getTimestamp = function() { 
    return new Date(parseInt(this.toString().slice(0,8), 16)*1000); 
} 

またはそのJavaのAPIのObjectId.getDate()を使用しています。これをクエリに使用する場合は、スニペットの例を以下に示します:

// create a date of yesterday 
DateTime yesterday = new DateTime().minusDays(1); 
Long timestamp = yesterday.getMillis()/1000L; 
String oidString = Long.toHexString(l) + "0000000000000000"; 

// now find anything newer than that date 
ObjectId id = new ObjectId(oidString); 
DBObject result = new BasicDBObject("_id", new BasicDBObject("$gt", id)); 
関連する問題