簡體   English   中英

yyyy的Java SimpleDateFormat格式問題

[英]Java SimpleDateFormat format issue with yyyy

我在使用SimpleDateFormat對象的format方法時遇到問題。

有問題的代碼是:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(date);

其中“date”是使用Calendar.getTimeInMillis()中的long int創建的Date對象;

Calendar cal = Calendar.getInstance();
Date date = new Date(cal.getTimeInMillis());

一切都工作正常,除了字符串的年份部分。 當我傳遞日期時,輸出的字符串如下所示:

0044-09-10 05:30:24 

傳遞的日期對象是從返回的長整數創建的:

Calendar.getTimeInMillis();

我相信從這個方法返回的數字是從1月1日開始的毫秒數。 1970年,我認為這是問題所在,但即使我在1970年加上毫秒數(大聲笑,可能是錯誤的事情,但它值得一試:P),它仍然在0044中解析年份。

我已經做了很多谷歌搜索,所有似乎都指向傳遞給SimpleDateFormat構造函數的字符串中的簡單問題,所以我在這里不知所措。

任何幫助是極大的贊賞。

如果需要任何其他信息,請告訴我,我會盡力提供。

再次感謝!

編輯:

我想我會更多地解釋一下背景:

技術人員將進行呼叫,並在到達站點時將呼叫標記為“已啟動”。 然后,應用程序將創建一個Calendar實例並保存從Calendar.getTimeInMillis()返回的long int。

當技術人員完成呼叫時,他/她將呼叫標記為“完成”。 同樣,創建了一個Calendar實例,並保存了從Calendar.getTimeInMillis()返回的long int。

這允許簡單的“呼叫持續時間”計算。

現在,當使用技術人員在應用程序中使用的結束表單時,在調用期間保存的長整數將傳遞給Date對象,然后將其傳遞給SimpleDateFormat.format()方法。

這就是問題出現的地方。 再次感謝,希望這有幫助。

要計算日期/時間之間的持續時間,不要依賴減去毫秒,這是非常不可靠的。

如果您使用的是Java 8,則應該利用新的java.time API,例如......

LocalDateTime dt1 = LocalDateTime.of(2014, 9, 11, 10, 0);
LocalDateTime dt2 = LocalDateTime.of(2014, 9, 11, 12, 0);

Duration duration = Duration.between(dt1, dt2);
System.out.println(duration.toDays());
System.out.println(duration.toHours());
System.out.println(duration.toMinutes());
System.out.println(duration.getSeconds());

哪個輸出......

0
2
120
7200

有關更多詳細信息,請查看期間和持續時間

或者,你可以使用JodaTimejava.time基於它)

Calendar.getTimeinMillis()返回的時間是“epoch”時間以來的毫秒數。 咨詢Date類的javadoc,你會發現“epoch”是January 1, 1970, 00:00:00 GMT 因此,你的代碼應該沒問題。 我用以下代碼測試過:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;


public class Cal {

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Date date = new Date(cal.getTimeInMillis());

        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(date);

        System.out.println(date);
    }

}

它給出了正確的輸出:

Thu Sep 11 09:48:30 KST 2014

有人認為我想提到的是“通話時長”不是約會對象。 如果您嘗試將兩個long值之間的減法結果轉換為Date對象,它將失敗,因為減法將從long值中消除該時間段的時間部分。 減法的結果只有一毫秒。

好的,我已經解決了這個問題。 事實證明,我沒有包含足夠的信息讓每個人都能正確地找出這個問題。

在應用程序中,我使用兩個選擇器,一個用於日期,一個用於時間,在保存日期時,它保存所選日期,時間設置為00:00:00並將其轉換為長整數(以毫秒為單位)。

使用:

Calendar cal = Calendar.getInstance();
cal.set(year, month, day);

保存時間時,它會節省使用相同方法選擇的時間,但是當我調用cal.set()我將年,月和日設置為0。

cal.set(0, 0, 0, hour, minute, second);

將此聲明更改為

cal.set(1970, 0, 1, hour, minute, second);

解決了這個問題。 我為浪費每個人的時間道歉,因為這對我來說只是一個邏輯錯誤。

我真誠地感謝所提供的所有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM