Set the date and time manually - java
我正试着让一个客户确定他们想要预订的日期和时间。我已经完成的代码在保存时会在文本文件中创建大量文本,并在再次尝试加载时崩溃。
这是我添加预订的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public static List<Reservation> addReservations(List<Reservation> reservations, List<Customer> customers) { int newReservationId = Reservation.getNumberOfReservations() + 1; String startString = readString("Enter Reservation date"); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date date = null; try { date = sdf.parse(startString); } catch (ParseException ex) { Logger.getLogger(ProjectIncrement5.class.getName()).log(Level.SEVERE, null, ex); } Calendar dateTime = Calendar.getInstance(); dateTime.setTime(date); listCustomers(customers, reservations); int reservationCustomerId = readInt("Enter Customer Id", Customer.getNumberOfCustomers(), 1); Customer reservationCustomer = customers.get(reservationCustomerId - 1); Reservation res = new Reservation(newReservationId, dateTime, reservationCustomer); reservations.add(res); return reservations; } |
预订类别:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | public class Reservation { private int reservationId; private Calendar dateTime; private Customer customer; private static int numberOfReservations = 0; public Reservation() { this.reservationId = 0; this.dateTime = null; this.customer = null; numberOfReservations++; } public Reservation(int reservationId, Calendar dateTime, Customer customer) { this.reservationId = reservationId; this.dateTime = dateTime; this.customer = customer; numberOfReservations++; } public static int getNumberOfReservations() { return numberOfReservations; } public int getReservationId() { return reservationId; } public void setreservationId(int reservationId) { this.reservationId = reservationId; } public Calendar getDateTime() { return dateTime; } public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } public String setDateTime() { SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); String dateString = formatter.format(this.dateTime.getTime()); return dateString; } @Override public String toString() { return"Reservation id:" + getReservationId() +"," +"Date/Time" + setDateTime() + "customer:" + getCustomer(); } } |
号
这是保存到文本文件中导致错误的原因:
1:java.util.GregorianCalendar[time=851385600000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=1996,MONTH=11,WEEK_OF_YEAR=52,WEEK_OF_MONTH=4,DAY_OF_MONTH=24,DAY_OF_YEAR=359,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]:4:<
号
我认为在获取日历实例时会发生错误,但我不确定如何更简单地执行此操作并解决此问题。有人能帮忙吗?
避免传统日期时间类
现代方法使用java.time类。避免麻烦的、混乱的、设计不好的旧遗留日期时间类,如
收集日期部分。如果输入错误,则捕获任何
1 2 3 4 5 6 | DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/uuuu" ) ; try { LocalDate ld = LocalDate.parse( input , f ) ; } catch ( DateTimeParseException e ) { … } |
似乎你没有明确地跟踪一天中的时间。因此,
将数据序列化为文本文件时,应使用标准的ISO 8601格式。这些格式设计为实用且不含糊,易于机器解析,易于跨文化的人阅读,且不假定精通英语。
在解析和生成字符串时,java.time类默认使用标准格式。只需调用
1 |
。关于java.time
JavaTimeFr框架是在Java 8和之后构建的。这些类取代了麻烦的旧遗留日期时间类,如
现在处于维护模式的joda time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。以及搜索堆栈溢出以获得许多示例和解释。规格为JSR 310。
在哪里获取java.time类?
- Java SE 8、Java SE 9及以后
- 内置。
- 标准JAVA API的一部分与捆绑实现。
- Java 9增加了一些次要的特性和修复。
- Java SE 6和Java SE 7
- 大部分JavaTimeActudio都被移植到TealEnter后端的Java 6和7中。
- 安卓
- threetenabp项目专门为Android调整threeten backport(如上所述)。
- 看看如何使用三连珠……
threeten额外项目使用额外的类扩展java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如
我接受JordiCastilla的回答,也希望告诉其他人也这样做。您可以使用
1 2 | DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); String stringToFile = df.format(date);//you can send this string to the file which you want to store the Date & Time |
号
问题是您将
看看你发布的内容:
firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,
YEAR=1996 ,MONTH=11 ,WEEK_OF_YEAR=52,WEEK_OF_MONTH=4,DAY_OF_MONTH=24 ,DAY_OF_YEAR=359,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=0 ,HOUR_OF_DAY=0,MINUTE=0 ,SECOND=0 ,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
号
那似乎是个正确的日期。我会说的更多,这似乎是一个真正完整的约会,有很多信息不是吗????;)
我不知道该如何存储这个日期,但是,例如,如果您想以
1 2 |
检查完后,如果
So in my
Reservation class, instead of having:private Calendar dateTime I will take that out and just have: privateString startString ?
号
不。其理念是:
- 在Java类中,存储在一个特定的EDCOX1中5Ω(EDOCX1,3)是可以的,但是戴特也可以。
- 在文本文件中,通过
String 发送人可读的日期。
很抱歉,我不能更具体地说,我不能执行您的代码,因为缺少很多部分(