2015-11-06 21 views
1

我目前使用Date Picker來顯示/選擇日期。我只是遇到格式問題。下面是這個例子如何構造它。使用整數在Java中創建新日期

new StringBuilder().append(month + 1) 
.append("-").append(day).append("-").append(year) 
.append(" ").toString(); 

我不希望這種格式,所以我嘗試以下,但它一直給不正確的一年,即使值是正確的,所以我不知道我做錯了。

SimpleDateFormat dateFormat = new SimpleDateFormat("d MMMM yyyy"); 
Date date = new Date(year,month,day); 
dates.setText(dateFormat.format(date)); 

例如,如果日期是2015年11月6日(當前日期)和我將其更改爲6 2015年12月,它會顯示3915正在返回 下列值12月6日年=2015個月= 11天= 6 而這創建3915年12月6日我不明白爲什麼年份顯示不正確,如果我選擇2016年將是3916

+2

不完整的問題:發佈您的所有代碼。單獨擁有一個dataFormat對象和一個日期對象...並沒有真正告訴我們將字符串轉換爲日期對象的操作。除非你有不允許的要求;你真的想看看日期/時間的Java8的東西;請參閱https://docs.oracle.com/javase/tutorial/datetime/ – GhostCat

+0

您認爲'MMMM yyyy'會做什麼? – thegauravmahawar

+0

哪個日期選擇器?您可能需要直接將格式提供給選擇器,以便它可以自己格式化值 – MadProgrammer

回答

0

您使用的格式是錯誤的。試試這個:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd MM YYYY"); 
+0

我的格式很好。當前日期正在使用該格式,並且顯示正常。我的應用程序崩潰時,我使用你的格式.. –

+0

你應該使用小寫字母y'「dd MM yyyy」'大寫'Y'表示「週年」 –

2

這種行爲實際上可以預料到。這就是documentation說你正在使用Date構造(重點由我加的):

public Date(int year, int month, int day)

棄用。改爲使用構造函數Date(long date)
構造一個使用給定年份,月份和日期初始化的Date對象。

如果給定的參數超出範圍,結果是不確定的。

參數: 年 - 年減1900年;必須是0到8099,(注意,8099是9999減去1900)
月 - 0至11
日 - 1到31

所以,你得到3915 2015年,因爲1900 + 3915 =

我建議你不要使用這個構造函數。首先它被標記爲已棄用。最重要的是,沒有人在他的腦子裏就看到一個說法int year的方法,並認爲「當然我必須從我傳遞值減去1900」

LocalDate用Java 8中引入的建議作爲替代品。你會這樣使用它

DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("dd MMMM yyyy"); 
LocalDate date = LocalDate.of(2015, Month.NOVEMBER, 6); 
dates.setText(dateFormat.format(date)); 
+0

你會推薦我用什麼來代替? –

+1

@CharlPotgieter增加了一個建議。如果您不能使用Java 8,請查看具有類似API的Joda時間 –

相關問題