![](/img/trans.png)
[英]How to get the day of week for a given date when the week begins on a Monday?
[英]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
LocalDate.parse(
"15/12/2016" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
).with(
TemporalAdjusters.next( DayOfWeek.MONDAY )
)
您正在使用麻烦的旧日期时间类(现在已遗留),由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 8及更高版本中。 这些类取代了麻烦的旧的旧式日期时间类,例如java.util.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程 。 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310 。
在哪里获取java.time类?
如果查看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.