在java中运行时向函数传递日期值



我正试图将值作为开始日期和结束日期传递给函数。截至目前,我对这些值进行了硬编码,其中开始日期为20210401,结束日期为20210419。01是日期,04是月份,2021是年份。

我想在运行时传递这些信息,其中开始日期应该是当前月份的开始日期,结束日期应该在当前月份的当前日期前2天。例如,如果当前月份是十月,而今天的日期是2021年10月15日。那么开始日期应该是20211001,结束日期应该是2021年11月13日。请推荐任何java代码。这真的很有帮助。

这里有一个使用LocalDate计算预期日期的解决方案。请注意,如果当前日期在当月的1日或2日,则代码将使用当前日期作为结束日期,而不是进行任何计算。您可以随意更改。

LocalDate now = LocalDate.now();
LocalDate first = now.withDayOfMonth(1);
LocalDate limit = now.withDayOfMonth(3);
LocalDate last = null;
if (now.isBefore(limit)) {
last = now;
} else {
last = now.minusDays(2);
}

我想在开始日期为开始的运行时传递这些当前月份的日期,结束日期应在当前月份的当前日期。

我建议您使用现代日期时间API,如下所示:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate startDate = today.with(TemporalAdjusters.firstDayOfMonth());
LocalDate endDate = today.minusDays(2);
// Use the following optional block if your requirement is to reset the end date
// to the start date in case it falls before the start date e.g. when the
// current date is on the 1st or the 2nd day of the month
//////////////////////// Start of optional block/////////////////////
if (endDate.isBefore(startDate)) {
endDate = startDate;
}
///////////////////////// End of optional block//////////////////////
// Get the strings representing the dates in the desired format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuuMMdd", Locale.ENGLISH);
String strStartDate = startDate.format(dtf);
String strEndDate = endDate.format(dtf);
System.out.println(strStartDate);
System.out.println(strEndDate);
}
}

输出:

20210401
20210419

注意:如果您的应用程序应该在与应用程序JVM不同的时区中使用,请用ZonedDateTime替换LocalDate,并用经过适用时区的ZonedDateTime.now(ZoneId zone)初始化today,例如ZoneId.of("Asia/Kolkata")

跟踪:日期时间了解有关现代日期时间API的更多信息。

使用传统日期时间API怎么样

传统的日期时间API(java.util日期时间类型及其格式API,SimpleDateFormat(已过时,并且是错误的。建议完全停止使用它们,并切换到java.time,即现代日期时间API*


*出于任何原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen BackportJava.time的大部分功能向后移植到Java 6&7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查通过desugaring和如何在Android项目中使用ThreeTenABP提供的Java 8+API

这里有一个可能会有所帮助的代码片段。在这里,我将本地系统时间作为endDate,并在两天前返回以获得您的startDate

// the format you'd like to display your date as.
String pattern ="yyyyMMdd";
// this formats the date to look how you'd want it to look

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

//Get date for 2 day prior to currentDate.
long SINGLE_DAY_IN_MS = 1000 * 60 * 60 *24;
long nDaysToGoBack = 2;     
//create 'startDate' variable from milliseconds as an input
Date startDate = new Date(System.currentTimeMillis()- (nDaysToGoBack*SINGLE_DAY_IN_MS));

//  Set 'endDate' as your current date.
Date endDate = new Date(System.currentTimeMillis());
System.out.println();
System.out.println("Start Date: "+ simpleDateFormat.format(startDate));
System.out.println("End Date: "+ simpleDateFormat.format(endDate));

我确定您是想使用当前系统日期还是是否想手动将不同日期传递到您的函数中。

如果你想在运行时手动将日期(例如,2021年1月10日(输入函数,你可以使用以下语句:

Date endDate = simpleDateFormat.parse("20210110");

然后想办法从endDate变量中减去2天,得到startDate变量。

相关内容

  • 没有找到相关文章

最新更新