Java 我想通过比较两天来打印31个工作日。它应该以有效格式打印日期
我要记录开始日期和结束日期。我正在根据工作日从开始日期迭代到结束日期,一旦我跨过第30天,我就打破了这个条件,我想打印确切的第30天。当我打印第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/
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对象。使用兼容的或更高版本。不需要字符串,也不需要
classes 从哪里获得java.time类java.sql.*
- 然后
- 内置的
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(使用
来显示日期。我也这样做了..String d=sdf.format(end);System.out.println(“第31个日期是”+d);它抛出了一个错误,无法将给定对象格式化为日期有效的格式是什么?SimpleDataFormat
将以end.getTime()
供您参考,非常麻烦的旧日期时间类,例如,2004年12月18日星期六00:00:00 CET
现在被java 8和更高版本中内置的类所取代。请参见。使用java.text.SimpleDateFormat
来显示日期。我也这样做了。..String d=sdf.format(end);System.out.println(“第31个日期是“+d”);它抛出一个错误,无法将给定对象格式化为日期有效格式是什么?SimpleDateFormat
将以end.getTime()
供您参考,非常麻烦的旧日期时间类,如,和Sat Dec 18 00:00:00 CET 2004
现在被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时,只需打印当前日期(表示开始的当前值)。它是workijava.text.SimpleDateFormat
- 然后