我希望每次点击按钮增加1周,我想在Jlabel1上显示一周的第一天,在JLabel2上显示周末。
我已经完成了显示第一天知道周和最后一天(见代码)的第一步,但第二步是下周增加1 例如本周(开始>结束04-07-2016> 10-07-2016)并且当我点击按钮时它增加两周(开始>结束11-07-2016> 17-07-2016)
public void gestion_date() {
Date date = new Date();
Calendar maDate = new java.util.GregorianCalendar();
maDate.setTime(date);
// On se positionne sur le Lundi de la semaine courante :
maDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
dat = df.format(maDate.getTime());
jLabel3.setText(dat);
maDate.add(Calendar.DATE, 6);
dat = df.format(maDate.getTime());
jLabel5.setText(dat);
}
答案 0 :(得分:1)
删除的答案是正确的。我不明白为什么它被撤回了。
该问题使用了由Java 8及更高版本中内置的java.time框架取代的麻烦的旧日期时间类。见Oracle Tutorial。许多功能已经被后端移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
您需要一个时区来获取当前日期。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
使用TemporalAdjusters
获取上周一。 DayOfWeek
是表示一周七天中每一天的便捷方式。
LocalDate previousOrSameMonday = today.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) );
如果您需要将一周中的最后一天用于其他目的,可以执行以下操作。但是对于问题中描述的显示,不需要存储此nextSunday
对象。您可以随时计算它,因为您知道它总是在一周开始后六天。
LocalDate nextSunday = previousOrSameMonday.with( TemporalAdjusters.next( DayOfWeek.SUNDAY ) );
现在你必须将一周的开始日存储在一个类的成员中,以便留在内存中。在gestion_date
方法中定义的局部变量在每次执行完成后会消失为虚无。在某个地方,您可以存储当前在Swing表单中显示的数据。我不知道那个地方在你的问题中没有提及。所以在这里我发明了虚构的名字modelBehindMySwingForm
,其中“模型”的意思是“我的应用程序的商业数据”。
modelBehindMySwingForm.weekStart = previousOrSameMonday;
每次单击加法或减法按钮时,将该成员变量增加一周。
modelBehindMySwingForm.weekStart = modelBehindMySwingForm.weekStart.plusWeeks( 1 ); // Or minusWeeks
使用表示LocalDate
对象值的String更新JLabel小部件。您可以致电toString
获取ISO 8601格式的日期。更好的方法是让{。{3}}让java.time本地化。将格式化程序对象存储在modelBehindMySwingForm
上的某个位置,因为重新创建它是没有意义的。
Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT );
formatter = formatter.withLocale( locale );
如上所示递增modelBehindMySwingForm.weekStart
之后,使用格式化程序生成字符串以在JLabel对象中显示。
String start = modelBehindMySwingForm.weekStart.format( modelBehindMySwingForm.formatter ); // Monday
String stop = modelBehindMySwingForm.weekStart.plusDays( 6 ).format( modelBehindMySwingForm.formatter ); // Following Sunday.