繁体   English   中英

如何从Java中的用户输入日期获取下周星期一日期

[英]How to get the next week monday date from user input date in java

我是一名新学习Java的在校学生!

我的情况是:*从用户处获取输入日期*向用户显示下周的星期一日期,以o / p的形式显示!

例如,输入日期:15/12/2016输出:19/12/2016(星期一)

我搜索了论坛,并获得了下面的代码。

GregorianCalendar date1 = new GregorianCalendar( 2016, 12, 12 ); 

        while( date1.get( Calendar.DAY_OF_WEEK ) != Calendar.MONDAY )
            date1.add( Calendar.DATE, 1 );

        System.out.println(date1.getTime());

但这给了我o / p 2017年1月16日星期一格林尼治标准时间+05:30,代表2016年12月12日i / p。

我想在2016年12月19日获得o / p。 请帮助我的技术天才!

使用SimpleDateFormat格式化日期

注意GregorianCalendar mounth它从0开始

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/YYYY");
System.out.println(sdf.format(date1.getTime()));

它很好地说明了GregorianCalendar( 2016, 12, 12 )意思

2017/12/01

您的代码正常工作。 您必须将月份设为0-11(1月-12月)。 请尝试以下修改的代码:

GregorianCalendar date1 = new GregorianCalendar( 2016, 11, 13 );  // here month start for 0 to 11 (Jan to Dec.)

    while( date1.get( Calendar.DAY_OF_WEEK ) != Calendar.MONDAY )
        date1.add( Calendar.DATE, 1 );

    System.out.println(date1.getTime());                

谢谢...

您可以简化代码:

GregorianCalendar date1 = new GregorianCalendar( 2016, 11, 16 ); 


date1.add(Calendar.DATE, 7);                       //Move to next weed
date1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);  //Set the day to Monday of current week

tl; dr

LocalDate.parse( 
    "15/12/2016" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
).with(
    TemporalAdjusters.next( DayOfWeek.MONDAY )
)

java.time

您正在使用麻烦的旧日期时间类(现在已遗留),由java.time类取代。

LocalDate

LocalDate类表示没有日期和时区的仅日期值。

LocalDate ld = LocalDate.parse( "15/12/2016" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) );

java.time类使用不可变对象 因此,我们无需更改(“突变”)现有对象中的值,而是根据原始对象的值实例化一个新对象。 一种实现方法是使用TemporalAdjuster的实现。

LocalDate nextMonday = ld.with( TemporalAdjusters.next( DayOfWeek.MONDAY ) ) ;

这些课程已经讨论了很多次。 因此,搜索堆栈溢出以获取更多信息。


关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的旧式日期时间类,例如java.util.DateCalendarSimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310

在哪里获取java.time类?

  • Java SE 8SE 9及更高版本
    • 内置的
    • 标准Java API的一部分,具有捆绑的实现。
    • Java 9添加了一些次要功能和修复。
  • Java SE 6SE 7
    • java.time的许多功能在ThreeTen- Backport中都被反向移植到Java 6和7。
  • 安卓系统

如果查看GregorianCalendar的JavaDoc,您可能会看到所使用的构造函数的month参数从1月份的0开始,因此12 月份的参数为11

然后将12解释为2017年 1 ,这意味着16/01/2017是正确的结果。

感谢你的帮助! 经过一个小时的编码,我通过以下代码实现了它! 请检查代码,如果我不在某个地方,请与我联系!

 GregorianCalendar date1 = new GregorianCalendar( year, month-1, date );
        SimpleDateFormat dateOnly = new SimpleDateFormat("dd/MM/yyyy");
//        System.out.println("Formated date"+dateOnly.format(date1.getTime()));
        String day1="",day2;

    while( date1.get( Calendar.DAY_OF_WEEK ) != Calendar.MONDAY )
        date1.add( Calendar.DATE, 1 );

    da1=String.valueOf(dateOnly.format(date1.getTime()));
    System.out.println("Start_date"+da1);

    date1.add(Calendar.DATE, 6);
    da2=String.valueOf(dateOnly.format(date1.getTime()));
    System.out.println("End_date"+da2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM