LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ; // Capture the current date as seen in a particular time zone.
for ( int i = 0 ; i < 7 ; i++ )
{
LocalDate localDate = today.plusDays( i );
System.out.println( "localDate = " + localDate );
}
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ); // Capture the current date as seen in a particular time zone.
today.datesUntil( today.plusWeeks( 1 ) ).forEach( System.out :: println );
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdfForParsing = new SimpleDateFormat("d/M/yyyy");
Date startDate = sdfForParsing.parse("5/12/2020");// 5th Dec 2020
Date endDate = sdfForParsing.parse("10/12/2020");// 10th Dec 2020
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdfForOutput = new SimpleDateFormat("yyyy-MM-dd");
Date date = startDate;
for (calendar.setTime(startDate); !date.after(endDate); calendar.add(Calendar.DAY_OF_YEAR,
1), date = calendar.getTime()) {
System.out.println(sdfForOutput.format(date));
}
}
}
正如其他人所说,避免使用 java.util.Date 如果有办法的话。喜欢巴兹尔布尔克的好答案。 有时,我们需要与使用遗留日期时间类的遗留代码进行互操作 Date 我们不能马上升级到java.time。 如果你得到一个 Date 形成一个遗留api,使用ariefbayu的答案。 如果相反,每次迭代都需要一个老式的 Date 对象,我将向您展示如何。
4条答案
按热度按时间jk9hmnmh1#
热释光;博士
避免遗留日期时间类。
从不使用
java.util.Date
.多年前,jsr310中定义的现代java.time类取代了这个糟糕的类。同上
Calendar
,GregorianCalendar
,和SimpleDateFormat
.本地日期
对于仅日期值(不含时间和时区),请使用
LocalDate
班级。呼叫
LocalDate.now
获取当前日期。对于任何一个特定的时刻,全球各地的日期都因时区而异。因此,请指定要查看日期的时区。如果省略,则隐式应用jvm的当前默认时区。
当你跑的时候。
如果您熟悉java流,请使用
LocalDate::datesUntil
.关于java.time
java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如
java.util.Date
,Calendar
, &SimpleDateFormat
.要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
现在处于维护模式的joda time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线
java.sql.*
班级。hibernate5和jpa2.2支持java.time。从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9带来了一些小的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android(26+)的更高版本捆绑了java.time类的实现。
对于早期的android(<26),一个称为api desugaring的过程带来了java.time功能的一个子集,这些功能最初没有内置到android中。
如果desugaring不能提供您所需要的,那么threetenabp项目将threeten backport(如上所述)改编为android。了解如何使用threetenabp…。
nukf8bse2#
所有现有的答案都很好。这个答案提供了一些额外的信息,这些信息也可以解决你的问题,或者至少可以引导你走向正确的方向。
使用现代api:
输出:
如果日期是字符串对象:
输出:
使用传统api:
输出:
如果日期是字符串对象:
输出:
注意,api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。在trail:date-time了解有关现代日期时间api的更多信息。注意:无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。
如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。
gwo2fgha3#
你可以用
plusDays()
通过转换Date
进入LocalDate
:注意,我使用相同的
dateCopy
变量,因为plusdays()返回LocalDate
我不想创建新的变量。上述代码将生成以下控制台日志:
qojgxg4l4#
正如其他人所说,避免使用
java.util.Date
如果有办法的话。喜欢巴兹尔布尔克的好答案。有时,我们需要与使用遗留日期时间类的遗留代码进行互操作
Date
我们不能马上升级到java.time。如果你得到一个
Date
形成一个遗留api,使用ariefbayu的答案。如果相反,每次迭代都需要一个老式的
Date
对象,我将向您展示如何。我查了这个片段
America/Cambridge_Bay
时区并得到以下输出:.forEach(jud -> {
someLegayMethod(jud);
someOtherLegacyMethod(jud, "some other argument");
});