Take date input from user and save it as date in java

十年热恋 提交于 2019-12-24 07:36:28

问题


I'm trying to take input from user in (dd/mm/yy) format, save it in same format and pass it with getter, setter to another class. I have tried this way:

This is what I have tried:

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
    Guest gstObject = new Guest();
    try {
        System.out.println("Enter check-in date (dd/mm/yy):");
        String cindate = input.next();
        Date date1 = myFormat.parse(cindate);
        gstObject.setIndate(date1);
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

With this code I'm getting an exception when I give input in (27012017 or 27 01 2017):

java.text.ParseException: Unparseable date: "27"
  at java.text.DateFormat.parse(DateFormat.java:366)
  at edu.lfa.GuestArrayList.main(GuestArrayList.java:49)

Please point out what mistake I have made.


回答1:


Here's javadoc for next(), this is what it says:

Finds and returns the next complete token from this scanner. A complete token is preceded and followed by input that matches the delimiter pattern.

Default delimiter is space and hence, it only reads 27. You need to read the whole line by using nextLine(). Following should work:

System.out.println("Enter check-in date (dd/mm/yy):");
String cindate = input.nextLine();
if(null != cindate && cindate.trim().length() > 0){
    Date date1 = myFormat.parse(cindate);
}

Update To check for null or empty string, you need to wrap the parsing code inside if condition.




回答2:


Other answers addressed how to use Scanner correctly. I'll address some other issues.

java.time

You are using troublesome old date-time classes, now legacy, supplanted by the java.time classes. Avoid the java.util.Date class like the Plague.

Also, you are inappropriately trying to represent a date-only value with a date+time class.

Instead, use java.time.LocalDate. The LocalDate class represents a date-only value without time-of-day and without time zone.

To parse the user's input, specify a formatting pattern to match exactly the expected input from your user.

DateTimeFormatter f = DateTimeFormatter.parse( "dd/mm/uuuu" );

Parse user input.

LocalDate ld = LocalDate.parse( input , f );

On your business class Guest, make the member variable of type LocalDate.

To persist the LocalDate, you can serialize to text in standard ISO 8601 format. Simply call toString.

String output = guest.getLocalDate().toString();

2017-01-23


About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.

Where to obtain the java.time classes?

  • Java SE 8 and SE 9 and later
    • Built-in.
    • Part of the standard Java API with a bundled implementation.
    • Java 9 adds some minor features and fixes.
  • Java SE 6 and SE 7
    • Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
  • Android
    • The ThreeTenABP project adapts ThreeTen-Backport (mentioned above) for Android specifically.
    • See How to use ThreeTenABP….

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.



来源:https://stackoverflow.com/questions/41881501/take-date-input-from-user-and-save-it-as-date-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!