Получение даты от пользователя и запись ее в URL - PullRequest
0 голосов
/ 27 июня 2018

Я хочу получить начальную и конечную даты от пользователя. Целью является получение значений Date между этими днями и редактирование 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);

Я пробовал это без цикла, для даты начала. И я получаю

Вс Июн 08 00:00:00 EEST 2014

Сб 21 июля 00:00:00 EEST 2018

062014 и 08062014

Издание для цикла, когда я получу Даты, преобразованные в строку, будет похоже на

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

И цикл будет пересылать значение firstDate1 (YYYYMM) и значение firstDate2 (DDMMYYYY) на следующий день или месяц. Поэтому мне нужно переслать startDate Значение даты до следующего дня.

1 Ответ

0 голосов
/ 27 июня 2018

С использованием 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

....

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...