2015-11-06 34 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时间 –