Java 我想通过比较两天来打印31个工作日。它应该以有效格式打印日期

Java 我想通过比较两天来打印31个工作日。它应该以有效格式打印日期,java,date,simpledateformat,Java,Date,Simpledateformat,我要记录开始日期和结束日期。我正在根据工作日从开始日期迭代到结束日期,一旦我跨过第30天,我就打破了这个条件,我想打印确切的第30天。当我打印第31天时,它没有给出有效的格式。它给出了以下输出: 31st date isjava.util.GregorianCalendar[time=1103308200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/

我要记录开始日期和结束日期。我正在根据工作日从开始日期迭代到结束日期,一旦我跨过第30天,我就打破了这个条件,我想打印确切的第30天。当我打印第31天时,它没有给出有效的格式。它给出了以下输出:

31st date isjava.util.GregorianCalendar[time=1103308200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Calcutta",offset=19800000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2004,MONTH=11,WEEK_OF_YEAR=51,WEEK_OF_MONTH=3,DAY_OF_MONTH=18,DAY_OF_YEAR=353,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=19800000,DST_OFFSET=0] 31
下面是我的代码:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.openqa.selenium.WebDriver;

public class DateDifferences_Validation {
    static WebDriver driver;
    public static void main(String[] args) {
        String startdate = "06/09/2004";
        String enddate = "18/12/2004";
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        try
        {
          Calendar start = Calendar.getInstance();
          start.setTime(sdf.parse(startdate));
          Calendar end = Calendar.getInstance();
          end.setTime(sdf.parse(enddate));
          int workingDays = 0;
          while(!start.after(end))
          {
            int day = start.get(Calendar.DAY_OF_WEEK);
            if ((day != Calendar.SATURDAY) && (day != Calendar.SUNDAY))
            workingDays++;
            start.add(Calendar.DATE, 1);
            if(workingDays>30){
                System.out.println("31st date is"+ end);
                break;
            }
          }
          System.out.println(workingDays);
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
}}

它不起作用,因为
end
对象是日历,而不是日期。您需要通过调用
end.getTime()
来获取日期对象,然后可以对其进行格式化:

        if(workingDays>30){
            // Raw display
            System.out.println("31st date is "+ end.getTime());

            // Formatted display
            System.out.println("31st date is "+ sdf.format( end.getTime() ));

            break;
        }
输出:

31st date is Sat Dec 18 00:00:00 CET 2004
31st date is 18/12/2004
31

它不起作用,因为
end
对象是日历,而不是日期。您需要通过调用
end.getTime()
来获取日期对象,然后可以对其进行格式化:

        if(workingDays>30){
            // Raw display
            System.out.println("31st date is "+ end.getTime());

            // Formatted display
            System.out.println("31st date is "+ sdf.format( end.getTime() ));

            break;
        }
输出:

31st date is Sat Dec 18 00:00:00 CET 2004
31st date is 18/12/2004
31

它现在正在工作,我们需要传递开始对象,而不是传递结束对象`

if(workingDays>30){
                 start.getTime();
                 System.out.println("31st date is "+ start.getTime());
                 System.out.println("31st date is "+ sdf.format( start.getTime() ));
                break;`
op是:

31st date is Tue Oct 19 00:00:00 IST 2004
31st date is 19/10/2004
31

它现在正在工作,我们需要传递开始对象,而不是传递结束对象`

if(workingDays>30){
                 start.getTime();
                 System.out.println("31st date is "+ start.getTime());
                 System.out.println("31st date is "+ sdf.format( start.getTime() ));
                break;`
op是:

31st date is Tue Oct 19 00:00:00 IST 2004
31st date is 19/10/2004
31
java.time 用java.time类取代问题中的麻烦的旧类更容易

您的规则很复杂,但这里有一些未经测试的示例代码,可能与您所寻求的非常接近

ISO 8601 将日期时间值表示为文本时,请使用标准ISO 8601格式。对于仅限日期的值,应为YYYY-MM-DD

在解析/生成字符串时,java.time类默认使用ISO 8601格式

LocalDate
收集结果日期

List< LocalDate > dates = new ArrayList<>( 31 ) ;  // Set initial capacity when known.
循环那些日期。在日期时间处理中,定义时间跨度的半开放方法通常是最好的。这意味着开始是包含的,而结束是独占的


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 然后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(java.time 用java.time类取代问题中的麻烦的旧类更容易

      您的规则很复杂,但这里有一些未经测试的示例代码,可能与您所寻求的非常接近

      ISO 8601 将日期时间值表示为文本时,请使用标准ISO 8601格式。对于仅限日期的值,应为YYYY-MM-DD

      在解析/生成字符串时,java.time类默认使用ISO 8601格式

      LocalDate
      收集结果日期

      List< LocalDate > dates = new ArrayList<>( 31 ) ;  // Set initial capacity when known.
      
      循环那些日期。在日期-时间处理中,定义时间跨度的半开放方法通常是最好的。这意味着开始是包含的,而结束是独占的


      关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

      该项目现已启动,建议迁移到类

      要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

      您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
      java.sql.*
      classes

      从哪里获得java.time类

      • 然后
        • 内置的
        • 标准JavaAPI的一部分,带有捆绑实现
        • Java9添加了一些次要功能和修复
        • 大部分java.time功能都在中向后移植到Java6和Java7
        • 更高版本的Android捆绑包实现了java.time类

        • 对于早期的Android(使用
          SimpleDataFormat
          来显示日期。我也这样做了..String d=sdf.format(end);System.out.println(“第31个日期是”+d);它抛出了一个错误,无法将给定对象格式化为日期有效的格式是什么?
          end.getTime()
          将以
          2004年12月18日星期六00:00:00 CET
          供您参考,非常麻烦的旧日期时间类,例如,
          java.text.SimpleDateFormat
          现在被java 8和更高版本中内置的类所取代。请参见。使用
          SimpleDateFormat
          来显示日期。我也这样做了。..String d=sdf.format(end);System.out.println(“第31个日期是“+d”);它抛出一个错误,无法将给定对象格式化为日期有效格式是什么?
          end.getTime()
          将以
          Sat Dec 18 00:00:00 CET 2004
          供您参考,非常麻烦的旧日期时间类,如,和
          java.text.SimpleDateFormat
          现在被java 8和更高版本中内置的类所取代。请参见。但是,我只想打印31个日期…而不是结束日期。它将输出作为结束日期。只需打印当workingDays=30时的当前日期(表示开始的当前值)。它现在正在工作…如果(workingDays>30){start.getTime();System.out.println(“第31个日期是”+start.getTime());System.out.println(“第31个日期是”+sdf.format(start.getTime()));break;但是,我只想打印31个日期…而不是结束日期。它将输出作为结束日期。当workingDays=30时,只需打印当前日期(表示开始的当前值)。它是worki