Pobranie daty od użytkownika

0

Witam.
Jak napisać program który będzie pobierał datę od użytkownika a później wyświetlał dzień który jest za rok od podanej daty? Mam coś takiego i nie wiem co dalej.

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Scanner;

import javax.xml.crypto.Data;

public class Time {

public static void main(String[] args) {
	
	
	GregorianCalendar gc = new GregorianCalendar();
	SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
	Scanner input = new Scanner(System.in);
	String data;
	
	System.out.println("Podaj datę w formacie d/m/r!");
	data = input.nextLine();
	

}

}
Nie wiem jak napisać kod gdzie będzie można wpisać datę tylko w odpowiednim formacie i jak zrobić żeby wyświetlał dzień który będzie za rok.

0

Jeśli to wersja konsolowa to może wystarczy użyć następującego wyrażenia regularnego do sprawdzenia formatu z tym co masz w polu data:

String regex = "^([0-2][0-9]||3[0-1])/(0[0-9]||1[0-2])/([0-9][0-9])?[0-9][0-9]$";

a następnie wyrzucić wyjątek jeśli format nie jest poprawny.

0

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Month;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class App {

public static void main(String[] args) throws ParseException {
		
	String date;
	
	Scanner input = new Scanner(System.in);
	
	System.out.println("Podaj date: ");
	date = input.nextLine();//pobranie daty od użytkownika
	
	SimpleDateFormat dateFormat = new SimpleDateFormat("dd, MM, yyyy");	
	String date1String = date;
	System.out.println(date);//wyświetlenie daty w konsoli wskazanej przez użytkownika
	
	LocalDate podanaData = LocalDate.now();
	System.out.println(podanaData.getDayOfWeek());
	
	LocalDate todayNextYear = podanaData.plusYears(1);
	System.out.println(podanaData.plusYears(1));
	
	System.out.println(todayNextYear.getDayOfWeek());

}

}

Jak mogę zmienić kod żeby podawał dzień tygodnia po wskazaniu daty przeze mnie a później wskazał jaki dzień będzie za rok od tej daty?

0

Proponuje następujące rozwiązanie:

   public static void main(String[] args) {
       Scanner input = new Scanner(System.in);

       System.out.println("Podaj date [dd,MM,yyyy]: ");
       String date = input.nextLine();// pobranie daty od użytkownika
       System.out.println(date);// wyświetlenie daty w konsoli wskazanej przez użytkownika

       DateTimeFormatter dateFormater = DateTimeFormatter.ofPattern("dd,MM,yyyy");
       LocalDate podanaData = LocalDate.parse(date, dateFormater);

       System.out.println(podanaData.getDayOfWeek());

       LocalDate todayNextYear = podanaData.plusYears(1);
       System.out.println(podanaData.plusYears(1));

       System.out.println(todayNextYear.getDayOfWeek());
   }```
0
public static void main(String[] args) throws ParseException {
		Scanner date2 = new Scanner(System.in);
		System.out.println("Podaj datę [dd.mm.yyyy] ");
		String time = date2.nextLine();//pobranie daty od użytkownika
		date2.close();
		
		Date date = new Date();
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
		String dateString = time;
		Date date1 = dateFormat.parse(dateString);
		
		System.out.println("to będzie: " + date1);//wyświetlenie daty od użytkownika w formacie dd.mm.yyyy
		
		
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.MONTH, 12);
		date = calendar.getTime();
		
		System.out.println("za rok: " + date);//wyświetlenie daty za rok ale od daty aktualnej a chcę od daty podanej przez użytkownika 

Dzięki za pomoc ale nie mogłem poradzić sobie z wcześniejszym kodem. Może wie ktoś jak teraz zrobić żeby podał rok do przodu po wpisaniu daty przez użytkownika. Program działa tak, że wyświetla dzień jaki jest po wpisaniu przez użytkownika daty i podaje jaki jest dzień za rok ale od daty aktualnej. A chcę żeby podawał rok do przodu od daty którą wpisze użytkownik.

0

Możesz przekonwertować Date na Calendar tak jak tutaj i dodać rok, albo dodać odpowiednią ilość milisekund przy tworzeniu nowego obiektu Date:

long year_ms = (long) 365 * 24 * 60 * 60 * 1000;
Date date = new Date(date1.getTime() + year_ms);
0
atmal napisał(a):

Możesz przekonwertować Date na Calendar tak jak tutaj i dodać rok, albo dodać odpowiednią ilość milisekund przy tworzeniu nowego obiektu Date:

long year_ms = (long) 365 * 24 * 60 * 60 * 1000;
Date date = new Date(date1.getTime() + year_ms);

Wielkie dzięki za pomoc. Udało się :-)

0

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class DateTest {

public static void main(String[] args) throws ParseException {
	Scanner date2 = new Scanner(System.in);
	System.out.println("Podaj datę [dd.mm.yyyy] ");
	String time = date2.nextLine();
	date2.close();
	
	
	
	SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
	String dateString = time;
	Date date1 = dateFormat.parse(dateString);
	
	System.out.println("to będzie: " + date1);
	
	
	Date date = new Date(date1.getTime());
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(date);
	calendar.add(Calendar.MONTH, 12);
	date = calendar.getTime();
	
	System.out.println("za rok: " + date);
}

}

Cała klasa powinna wyglądać następująco. Gdyby ktoś potrzebował wrzucam całą klasę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1