gpt4 book ai didi

java - 从用户获取日期并将其写入 URL

转载 作者:行者123 更新时间:2023-12-02 11:04:39 25 4
gpt4 key购买 nike

我想从用户那里获取开始和结束日期。目的是获取这些天之间的日期值并编辑 URL http://www.tcmb.gov.tr/kurlar/201805/07052018.xml

例如:用户给我提供了开始日期 07-08-2017 和结束日期 07-10-2017。我想为这两天之间的所有日子创建一个循环,并希望此循环创建类似 http://www.tcmb.gov.tr/kurlar/201708/07082017.xml 的链接。 ,等等。

    Date startDate;
Date endDate;
Scanner input=new Scanner(System.in);
System.out.println("Enter the starting date as MM/DD/YYYY");
String a=input.next();

System.out.println("Enter the ending date as MM/DD/YYYY");
String c=input.next();

SimpleDateFormat b= new SimpleDateFormat("MM/dd/yyyy");
startDate= b.parse(a);

endDate= b.parse(c);

SimpleDateFormat d= new SimpleDateFormat("yyyyMM");

String startDaate= d.format(startDate);

SimpleDateFormat e= new SimpleDateFormat("ddMMyyyy");
String startDaate2= e.format(startDate);



System.out.println(startDate);
System.out.println(endDate);
System.out.println(startDaate);
System.out.println(startDaate2);

我在没有循环的情况下尝试了这个开始日期。我得到了

2014 年东部夏令时间 6 月 8 日星期日 00:00:00

2018 年东部夏令时间 7 月 21 日星期六 00:00:00

062014 和 08062014

当我将日期转换为字符串时,循环的版本将如下

String s1="www.tcmb.gov.tr/kurlar/"+startDaate+"/"+startDaate2+".xml"; 

循环会将firstDate1值(YYYYMM)和firstDate2值(DDMMYYYY)转发到下一天或下个月。因此我需要转发 startDate 到第二天的日期值。

最佳答案

使用java.time:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

...

String sDate;
String eDate;

try (Scanner scan = new Scanner(System.in)) {
System.out.print("Enter first Date (dd/MM/yyyy): ");
sDate = scan.nextLine();
System.out.print("Enter second Date (dd/MM/yyyy): ");
eDate = scan.nextLine();

}

DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy");

LocalDate dateStart = LocalDate.from(format.parse(sDate));
LocalDate dateEnd = LocalDate.from(format.parse(eDate));
while (!dateStart.isAfter(dateEnd)) {
System.out.println(dateStart);
dateStart = dateStart.plusDays(1);
}

或者您也可以使用 joda time API:

import org.joda.time.Days;
import org.joda.time.DurationFieldType;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

...

String sDate = "07/08/2017";
String eDate = "07/10/2017";

DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy");

LocalDate dateStart = new LocalDate(format.parseLocalDate(sDate));
LocalDate dateEnd = new LocalDate(format.parseLocalDate(eDate));

int days = Days.daysBetween(dateStart, dateEnd).getDays();
for (int i = 0; i < days; i++) {
LocalDate d = dateStart.withFieldAdded(DurationFieldType.days(), i);
System.out.println(d);
}

更新:

您已经编辑了您的问题,根据我的理解,您需要三种不同的日期格式,如下所示:

input date : dd/MM/yyyy
output date1 : yyyyMM
output date2 : ddMMyyyy

所以我更新了我的答案如下:

String sDate = "07/08/2017";
String eDate = "07/10/2017";

DateTimeFormatter format1 = DateTimeFormatter.ofPattern("dd/MM/yyyy");
DateTimeFormatter format2 = DateTimeFormatter.ofPattern("ddMMyyyy");
DateTimeFormatter format3 = DateTimeFormatter.ofPattern("yyyyMM");

LocalDate dateStart = LocalDate.from(LocalDate.parse(sDate, format1).withDayOfMonth(1)); // just getting the month and year from user input and start with first day of given month
LocalDate dateEnd = LocalDate.from(format1.parse(eDate));
while (!dateStart.isAfter(dateEnd)) {
System.out.println("date1 : "+dateStart.format(format3) + " - date2: " + dateStart.format(format2));
dateStart = dateStart.plusDays(1);
}

输出:

date1 : 201708 - date2: 01082017
date1 : 201708 - date2: 02082017
date1 : 201708 - date2: 03082017
date1 : 201708 - date2: 04082017
date1 : 201708 - date2: 05082017
date1 : 201708 - date2: 06082017

....

希望这能解决您的问题。

关于java - 从用户获取日期并将其写入 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51064971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com