1

Groovy を使用して、タイムスタンプを DD/MM/YYYY 形式の日付に変換しようとしています

これを行うために、最初にデータベース クエリから返された Timestamp 値を取得します。形式は次のとおりです。

YYYY-MM-DD HH:MM:SS.S (the .S is actually a milisecond I guess)

そこで、新しい変数を作成し、次のように getTime() メソッドを使用してミリ秒に変換します。

def long myDate = theDate.getTime()

さて、ここで得られるもののいくつかの例は次のとおりです。

theDate (timeStamp)     myDate (time in milis)

1987-01-23 00:00:00.0 : 538358400000        
1959-08-26 00:00:00.0 : -326682000000       
1982-12-31 00:00:00.0 : 410140800000          

ここで、DD/MM/YYYY の形式で新しい日付を作成しようとすると、

def dt = new Date(myDate)
dt = dt.format("DD/MM/YYYY")

これは最終的に必要なものであり、次の値を取得します。

theDate (timeStamp)     myDate (time in milis)     new formatted date

1987-01-23 00:00:00.0 : 538358400000          :    23/01/1987  (Perfect)
1959-08-26 00:00:00.0 : -326682000000         :    238/08/1959 (Day is off)
1982-12-31 00:00:00.0 : 410140800000          :    365/12/1982 (Day is off)

だから私の質問は、なぜこれが奇妙な値を返すのか、それを修正するために何を変更する必要があるのですか?

ありがとう

4

2 に答える 2

1

dmahapatro が正しい答えを出します。http://docs.oracle.com/javase/1.5.0を指しているhttp://groovy.codehaus.org/groovy-jdk/java/util/Date.html#format%28java.lang.String%29を見てください。 /docs/api/java/text/SimpleDateFormat.html「日付と時刻のパターン」を見ると、DD は年間通算日、dd は月通算日 (目的の日付) であることがわかります。

于 2013-10-09T12:20:51.727 に答える
1

日付形式は

dd/MM/yyyy

ミリ秒は であるエポックから計算されるため、負のミリ秒が得られます1st Jan 1970。それより前の日付は、負のミリ秒値になります。

タイムスタンプを含む実際の形式は次のようになります

yyyy/MM/dd HH:mm:ss.SSS

M月と分の上限に注意してくださいm

于 2013-10-09T12:18:11.700 に答える