[英]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
有關更多詳細信息,請查看期間和持續時間 。
或者,你可以使用JodaTime ( java.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.