从用户处获取日期输入,并将其保存为java中的日期
我试图从用户那里获取从用户处获取日期输入,并将其保存为java中的日期,java,java.util.scanner,java.util.date,Java,Java.util.scanner,Java.util.date,我试图从用户那里获取(dd/mm/yy)格式的输入,以相同的格式保存它,并将其与getter、setter一起传递给另一个类。我试过这样做: 这就是我尝试过的: public static void main(String[] args) { Scanner input = new Scanner(System.in); SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy"); Guest gstObj
(dd/mm/yy)
格式的输入,以相同的格式保存它,并将其与getter、setter一起传递给另一个类。我试过这样做:
这就是我尝试过的:
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();
}
}
有了这段代码,我在(27012017或27 01 2017)中输入时遇到了一个异常:
java.text.ParseException:无法解析的日期:“27”
在java.text.DateFormat.parse(DateFormat.java:366)
位于edu.lfa.GuestArrayList.main(GuestArrayList.java:49)
请指出我犯了什么错误。javadoc对于next()
,它是这样说的:
查找并返回此扫描程序中的下一个完整令牌。A.
完整标记的前面和后面是与
分隔符模式
默认分隔符是空格,因此它只读取27
。您需要使用nextLine()
阅读整行内容。应采取以下措施:
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);
}
更新要检查
null
或空字符串,您需要在if
条件中包装解析代码。其他答案说明了如何正确使用扫描仪。我将讨论其他一些问题
java.time
您使用的是麻烦的旧日期时间类,现在是遗留的,被java.time类取代。避免像瘟疫一样使用java.util.Date
类
此外,您试图用日期+时间类表示仅日期的值是不恰当的
相反,请使用java.time.LocalDate
。该类表示一个仅限日期的值,不包含一天中的时间和时区
要分析用户的输入,请指定一种格式模式,使其与用户的预期输入完全匹配
DateTimeFormatter f = DateTimeFormatter.parse( "dd/mm/uuuu" );
解析用户输入
LocalDate ld = LocalDate.parse( input , f );
在您的商务类Guest
上,将成员变量设置为LocalDate
类型
要持久保存LocalDate
,可以将其序列化为标准格式的文本。只需调用toString
String output = guest.getLocalDate().toString();
2017-01-23
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。使用input.nextLine()
而不是input.next()
。此外,您正在提示用户使用与您的SimpleDateFormat
实际接受的格式不同的格式,因此请注意。如果您希望用户输入dd/mm/yy
,为什么要编写myFormat=new SimpleDateFormat(“dd-mm-yyyy”)代码>?尝试输入“27 01 2017”,因为日期格式为“dd-MM-yyyy”,或将格式更改为“dd/MM/yyyy”。我更改了字符串cindate=input.next()
toString cindate=input.nextLine()代码>现在我没有输入日期就出错了。错误为java.text.ParseException:Unparseable date:“”位于edu.lfa.GuestArrayList.main(GuestArrayList.java:49)的java.text.DateFormat.parse(DateFormat.java:366)
我已更新答案,以包含空字符串检查。基本上,如果输入为null或仅为空格,则可以跳过解析并显示错误消息。
String output = guest.getLocalDate().toString();