我正在尝试运行一个简单的代码来模拟管理某些影院的系统。
我有一个Movie类,我想添加一个Date (电影是拥有电影阵列的电影类的一部分) 当向电影院插入新数据时,用户应该输入 - 除了电影的“名称”和“评级” - 日期和时间。 设定日期的正确方法是什么?
我应该为每个Movie对象创建一个新的Calendar对象,并使用它来设置每个Movie的日期和时间吗? 或者,Cinema中是否应该有一个 Calendar对象,所有Movie对象都会使用它来更新日期和时间(当然根据用户输入)?
答案 0 :(得分:2)
如果通过控制台输入日期,则很可能将其保存为单个字符串。您必须定义输入日期的格式。将该格式与SimpleDateFormat一起使用以从中创建Date对象。
这样的事情应该这样做:
Scanner sc = new Scanner(System.in);
String dateFormat = "dd/MM/yyyy";
System.out.println("Please enter a date (" + dateFormat + "): ");
String dateString = sc.next();
Date date = new SimpleDateFormat(dateFormat).parse(dateString);
System.out.println(date.toString());
sc.close();
答案 1 :(得分:1)
answer by A4L是正确的。但正如Jon Skeet评论的那样,你真的应该使用Joda-Time。 java.util.Date/Calendar类非常糟糕,并且在Java 8中被java.time。*类取代,其设计灵感来自Joda-Time。
请注意,与java.util.Date不同,org.joda.time.DateTime知道其时区。
这是A4L示例代码的Joda-Time版本。
您可以选择或定义其他formats for parsing。我选择了标准ISO 8601格式。
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;
Scanner sc = new Scanner(System.in);
DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser();
// A good practice is to always specify a time zone rather than depend on default.
parser = parser.withZone( DateTimeZone.forID( "America/New_York" ) );
System.out.println("Please enter a date (" + "yyyy-MM-dd'T'HH:mm:ss.SSSZZ" + "): ");
String dateString = sc.next();
DateTime dateTime = null;
try {
dateTime = parser.parseDateTime(dateString);
System.out.println( "dateTime: " + dateTime.toString() );
} catch ( IllegalArgumentException e ) {
// e.printStackTrace();
System.out.println( "The date you entered cannot be parsed." );
}
sc.close();
跑步时......
Please enter a date (yyyy-MM-dd'T'HH:mm:ss.SSSZZ):
2013-12-13T23:45
dateTime: 2013-12-13T23:45:00.000-05:00
答案 2 :(得分:0)
日期用于保存特定时刻的价值。日历用于日期/时间操作,例如获取weeek等的日期
答案 3 :(得分:0)
如果您使用单个日历实例,则每部电影都将具有相同的日期和时间。我不认为这可能是你想要的,所以你应该为每部电影选择不同的。