我正在设计一个预订系统,需要仅表示2015年的日期,格式为“dd,mmm,2015”(例如“05 Jan 2015”)。 我有点困惑如何做到这一点,看起来Date支持这样的东西,但现在已被弃用? 我还对公历日历类GregorianCalender感到困惑。 GregorianCalender(2015,01,05)是2015年日期的表示还是另一个完全不同的对象?
java.time.LocalDate
如果您正在使用Java 8或更高版本,应该使用java.time.LocalDate
类。
要解析和格式化此日期,需要使用java.time.format.DateTimeFormatter
类。
用法示例:
LocalDate date = LocalDate.of(2015, Month.JANUARY, 5);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd, MMM, yyyy", Locale.ENGLISH);
System.out.println(formatter.format(date)); // prints "05, Jan, 2015"
date = LocalDate.parse("06, Jan, 2015", formatter);
System.out.println(date.getDayOfMonth()); // prints "6"
java.util.Date
类来表示日期,使用java.util.GregorianCalendar
来从字段创建日期对象或检索日期组件,并使用java.text.SimpleDateFormat
来解析和格式化。 使用示例:GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.set(2015, Calendar.JANUARY, 5);
Date date = gregorianCalendar.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd, MMM, yyyy", Locale.ENGLISH);
System.out.println(simpleDateFormat.format(date)); // prints "05, Jan, 2015"
date = simpleDateFormat.parse("06, Jan, 2015");
gregorianCalendar.setTime(date);
System.out.println(gregorianCalendar.get(Calendar.DAY_OF_MONTH)); // prints "6"
Date
、Calendar
、GregorianCalendar
)是非常糟糕的类,设计令人震惊,非常混乱,使用起来令人沮丧。 - Basil Bourque我不确定你在哪里看到了这个弃用警告,但我仍然会使用Date和DateFormat对象。
DateFormat format = new SimpleDateFormat("dd MM");
String output;
output = format.format(new Date()) + " 2015";
System.out.println(output);
输出:
06 04 2015
DateFormat format = new SimpleDateFormat("dd MM");
String output;
output = format.format(new Date());
output = output.replaceAll("0", "") + " 2015";
System.out.println(output);
输出:
6 4 2015
关于SimpleDateFormat的更多信息,请参考javadoc文档:SimpleDateFormat参考文档
Date
的设计很差且令人困惑,尽管它的名称是“日期”,但它并不代表日期。它也已经过时、陈旧、过时了。虽然还没有正式被弃用,但我们将受益于将其视为已弃用。 - Ole V.V.java.security
、java.sql
、java.util.Timer
和许多其他类。废弃所有这些将需要相当大的工作量。虽然不应在新代码中使用它,但对于一些现有代码来说,它是不可避免的。值得庆幸的是,在java.time.*
和java.util.Date
之间进行转换非常简单。 - vbezhenarjava.sql
中的用法。自从JDBC 4.2以来,我们可以将java.time对象传递到SQL并从SQL中获取它们。 - Ole V.V.这将以年月日的形式获取今天的日期作为一个int
。您可以使用此int来比较日期。例如,dateInt_1 < dateInt_2
表示date1
在date2
之前。dateInt_1 == dateInt_2
表示两个日期相同。等等。
int dateInt = Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(new Date()));
Date
没有格式概念,它只是自Unix纪元以来的毫秒数。使用SimpleDateFormat
将日期实际格式化为您想要的任何格式... - MadProgrammer