Java,将日期设置为0/0/0
我有一个带有一些日期的对象,我想在getter中返回它们。问题是我需要执行Java,将日期设置为0/0/0,java,date,Java,Date,我有一个带有一些日期的对象,我想在getter中返回它们。问题是我需要执行Date.toString()因为我必须打印它们,当日期为空时,我会得到一个NullPointerException 我想在日期为空时返回日期0/0/0,但我不知道如何设置此值。有办法吗?就像newdate(0)返回1970-01-01-00:00:00一样,除了返回0/0/0之外,还有其他类似的方法吗 谢谢 根据定义,没有日期0/0/0,因为没有日期0和月份0。日是集合{1,…,28或30或31}的成员,月是集合{1,…
Date.toString()
因为我必须打印它们,当日期为空时,我会得到一个NullPointerException
我想在日期为空时返回日期0/0/0,但我不知道如何设置此值。有办法吗?就像newdate(0)
返回1970-01-01-00:00:00一样,除了返回0/0/0之外,还有其他类似的方法吗
谢谢 根据定义,没有日期0/0/0,因为没有日期0和月份0。日是集合{1,…,28或30或31}的成员,月是集合{1,…,12}的成员。因此,不可能将0/0/0表示为日期对象,这是好事。根据定义,没有日期0/0/0,因为没有日期0和月份0。日是集合{1,…,28或30或31}的成员,月是集合{1,…,12}的成员。因此,将0/0/0表示为日期对象是不可能的,这是好事。这个简单的方法可以满足您的需要,正如您的问题评论中已经提到的:
public String dateString(Date date) {
if (date != null)
return date.toString();
else
return "0/0/0";
}
或
更新:如评论中所建议的,不鼓励第二种选择。如问题评论中所述,这种简单的方法可以满足您的需要:
public String dateString(Date date) {
if (date != null)
return date.toString();
else
return "0/0/0";
}
或
更新:如评论中所建议的,不建议使用第二种选择。Java使用的是公历,它没有0年。此外,你必须记住,现在也没有月了。将月份设置为“0”将得到一月,因为月份基于0指数。零日也不存在。 假设您正在获取并返回“现代”日期(AD),您可以在BC时代设置“下限”日期。因此,当您得到一个空日期时,您可以返回一个BC日期,以将其与实际日期区分开来。代码如下:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.ERA, GregorianCalendar.BC); //Set the BC era
cal.set(Calendar.YEAR, 1); //Set the year to 1 BC
cal.set(Calendar.MONTH, 0); //Set the month to January
cal.set(Calendar.DAY_OF_MONTH, 1); //Set the day to 1st
DateFormat df = new SimpleDateFormat("yyyy MMM d G"); //Format the date
String returnedDate = df.format(cal.getTime()); //Generate a String of it for other use
如果您还需要从BC时代获取日期(可能通过设置更旧的日期),则可以根据您的需要自定义代码
编辑:当然,您可以使用其他人的建议,即检查null并返回“0/0/0”
字符串,但这可能会在以后尝试解析上述字符串时导致进一步的问题。此外,根据定义,0/0/0在公历中不是有效日期(请参见说明),因此应避免使用此“通配符”字符串,并设置实际日期,如我在上文中所述
澄清:公历既不包含0年,也不包含0月或0日。根据定义,也不包含Java实现(这意味着它不是有意限制,它是其概念的一部分)。Java使用的公历没有0年。此外,你必须记住,现在也没有月了。将月份设置为“0”将得到一月,因为月份基于0指数。零日也不存在。 假设您正在获取并返回“现代”日期(AD),您可以在BC时代设置“下限”日期。因此,当您得到一个空日期时,您可以返回一个BC日期,以将其与实际日期区分开来。代码如下:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.ERA, GregorianCalendar.BC); //Set the BC era
cal.set(Calendar.YEAR, 1); //Set the year to 1 BC
cal.set(Calendar.MONTH, 0); //Set the month to January
cal.set(Calendar.DAY_OF_MONTH, 1); //Set the day to 1st
DateFormat df = new SimpleDateFormat("yyyy MMM d G"); //Format the date
String returnedDate = df.format(cal.getTime()); //Generate a String of it for other use
如果您还需要从BC时代获取日期(可能通过设置更旧的日期),则可以根据您的需要自定义代码
编辑:当然,您可以使用其他人的建议,即检查null并返回“0/0/0”
字符串,但这可能会在以后尝试解析上述字符串时导致进一步的问题。此外,根据定义,0/0/0在公历中不是有效日期(请参见说明),因此应避免使用此“通配符”字符串,并设置实际日期,如我在上文中所述
澄清:根据定义,公历既不包含0年,也不包含0月或0日,也不包含Java实现(这意味着它不是有意限制,它是其概念的一部分)。- 类别:
- 包装:
LocalDate.ofEpochDay()
创建LocalDate常量。我没有返回null date(),而是根据评估的案例返回LocalDate对象。然后根据我在我的域中得到的getBirthdate方法,我会做一些事情
常数的定义
实施
用法
德国劳埃德船级社
LocalDate.ofEpochDay()
创建LocalDate常量。我没有返回null date(),而是根据评估的案例返回LocalDate对象。然后根据我在我的域中得到的getBirthdate方法,我会做一些事情
常数的定义
实施
用法
GL可怕的
Date
和Calendar
类在几年前被java.time类取代
LocalDate
该类表示一个只包含日期的值,不包含一天中的时间,也不包含或
你可以用一个数字来设置月份,1-12月的数字为1-12
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,最好使用预定义的枚举对象,一年中每个月一个。提示:在整个代码库中使用这些Month
对象,而不仅仅是一个整数,这样可以使代码更加自我记录,确保有效值,并提供更高的可用性。同上
零日期无意义
除了返回0/0/0之外,是否还有类似的内容
没有
试图用日期全为零来表示null
,是错误的做法。不存在日期全为零的情况(年、月、日都为零)
相反,选择任意日期作为特殊值。详细记录您的选择及其含义
不要选择dat
if (getBirthdate() == LocalDateUtils.EMPTY_FIELDS) {
}
if (getBirthdate() == LocalDateUtils.EMPTY_FIELD_DAY_OF_MONTH) {
}
if (getBirthdate() == LocalDateUtils.EMPTY_FIELD_MONTH) {
}
if (getBirthdate() == LocalDateUtils.EMPTY_FIELD_YEAR) {
}
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;