用java表示日期的最佳方法

用java表示日期的最佳方法,java,date,Java,Date,我正在设计一个预订系统,只需表示2015年的日期,格式为“dd,mmm,2015”(例如“2015年1月5日”)。我有点困惑如何做到这一点,它看起来像这样的东西,但现在已经贬值?我也被公历类搞糊涂了,公历(2015,01,05)是2015年的一个日期的表示还是另一个对象的表示 我不确定您在哪里看到了弃用,但我仍然会使用Date和DateFormat对象 DateFormat format = new SimpleDateFormat("dd MM"); String output; outpu

我正在设计一个预订系统,只需表示2015年的日期,格式为“dd,mmm,2015”(例如“2015年1月5日”)。我有点困惑如何做到这一点,它看起来像这样的东西,但现在已经贬值?我也被公历类搞糊涂了,公历(2015,01,05)是2015年的一个日期的表示还是另一个对象的表示

我不确定您在哪里看到了弃用,但我仍然会使用Date和DateFormat对象

DateFormat format = new SimpleDateFormat("dd MM");
String output;

output = format.format(new Date()) + " 2015";
System.out.println(output);
输出:

06 04 2015
6 4 2015
如果要删除0,请将代码更改为:

    DateFormat format = new SimpleDateFormat("dd MM");
    String output;

    output = format.format(new Date());
    output = output.replaceAll("0", "") + " 2015";
    System.out.println(output);
输出:

06 04 2015
6 4 2015

有关SimpleDataFormat的更多信息,请参阅javadoc:

Java8日期和时间API为您提供了大量的日期和时间使用灵活性。
查找更多关于

的信息这会将今天的日期显示为
int
,然后是年、月、日。可以使用此int来比较日期。也就是说,
dateInt_1
意味着
date1
date2
之前
dateInt_1==dateInt_2
意味着这两个日期是相同的。等等

int dateInt = Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(new Date()));
java.time.LocalDate
如果您使用的是Java8或更高版本,那么应该使用类

要解析和格式化此日期,需要使用类

用法示例:

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"
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"

如果您使用的是Java 7或更早版本,那么应该使用
Java.util.Date
类来表示日期,
Java.util.GregorianCalendar
从字段创建日期对象或检索日期组件,并使用
Java.text.SimpleDataFormat
来解析和格式化。用法示例:

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"
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"

您所说的表示日期是什么意思?它是否有一个日期对象,并且您希望将其显示为格式为“dd mmm 2015”的字符串?它用于房间预订系统,因此我希望表示房间预订的日期,并检查房间是否未预订等。但是我也希望日期在2015年有效。Java8中的LocalDate类是一个非常好的选择。如果您有较低版本的Java,请查看JodaTime库。如果您使用的是Java8,则使用新的时间API,如果不是,则使用JodaTime。Java
Date
没有格式的概念,它只是Unix时代以来的毫秒数。使用
SimpleDataFormat
以您实际需要的格式实际格式化日期…使用允许您格式化日期的日期模块。然后选择YYYY/MM/DD格式,因为这样可以将它们转换为整数,只需使用条件运算符即可确定一个日期是否等于、小于或大于另一个日期等。如果不需要零,只需使用
“d M”
“d M YYYY”
。您的代码在每个月的第10、20和30日以及整个10月份都会出现严重错误。当然,除了它只在2015年起作用这一事实,你让我做到了。是的,它只在2015年起作用;这就是问题的目的。我不确定你在哪里看到了不推荐的内容。发问者可能一直在看一个不推荐的构造函数。在任何情况下,
Date
的设计都很糟糕,令人困惑,尽管它的名称并不代表日期。它也过时了,过时了,过时了。还没有正式反对,我们将从对待它的态度中获益。@OleV.V。它仍然在许多API中使用,如
java.security
java.sql
java.util.Timer
和许多其他类。要驳斥这些观点需要付出相当大的努力。它不应该在新代码中使用,但对于某些现有代码来说,它是不可避免的。谢天谢地,在
java.time.*
java.util.Date
@vbezhenar之间转换通常是正确的。不过,他们很容易反对
java.sql
中的用法。从JDBC4.2开始,第一部分是明智的,使用java.time类。至于第二部分,关于Java7和Java6,我建议人们添加项目中大部分Java.time功能的后端口。中的API与java.time中的API几乎相同。因此,无需学习两种不同的框架。更重要的是,那些遗留类(
Date
Calendar
GregorianCalendar
)是非常糟糕的类,设计糟糕,非常混乱,使用起来令人沮丧。