点击增加周数

时间:2016-07-06 23:01:18

标签: java date calendar dayofweek

我希望每次点击按钮增加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);
}

The screen of my Jlabel and button and the example

1 个答案:

答案 0 :(得分:1)

删除的答案是正确的。我不明白为什么它被撤回了。

java.time

该问题使用了由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.