为什么java让我们编写更多的代码?

为什么java让我们编写更多的代码?,java,date,Java,Date,为什么java让我们编写更多的代码? e、 g: 输出: Fri Jun 22 16:30:06 BRT 2018 Fri Jun 22 16:30:06 BRT 2018 Fri Nov 03 04:37:44 BRT 2017 有人能解释为什么会发生这种情况,因为calendar.getTime不返回java.util.Date的新实例吗?calendar.getTime返回一个新的日期实例,因此尝试更改返回对象的值是徒劳的,对calendar实例没有影响 看看来源: public fin

为什么java让我们编写更多的代码? e、 g:

输出:

Fri Jun 22 16:30:06 BRT 2018
Fri Jun 22 16:30:06 BRT 2018
Fri Nov 03 04:37:44 BRT 2017
有人能解释为什么会发生这种情况,因为calendar.getTime不返回java.util.Date的新实例吗?

calendar.getTime返回一个新的日期实例,因此尝试更改返回对象的值是徒劳的,对calendar实例没有影响

看看来源:

public final Date getTime() {
    return new Date(getTimeInMillis());
}
这清楚地表明,更改返回日期上的任何内容都不会更改日历对象本身

您可以进行更改,然后使用修改后的日期调用calendar.setTime来解决此问题

为什么java让我们编写的代码比普通代码多

因为您使用的是过时的日期和时间类。java.time是现代java日期和时间API,它不仅允许更简洁的代码,还允许更清晰的代码:

long time = 1_509_694_664_442L;
Instant i = Instant.ofEpochMilli(time);
System.out.println(i);
或者,既然你要求简洁:

Instant.ofEpochMilli( 1_509_694_664_442L ).toString()
输出:

Fri Jun 22 16:30:06 BRT 2018
Fri Jun 22 16:30:06 BRT 2018
Fri Nov 03 04:37:44 BRT 2017
2017-11-03T07:37:44.442Z

对于我们中的一些人来说,更容易理解:-

ZoneId zone = ZoneId.of("America/Recife");
Locale brazil = Locale.forLanguageTag("pt-BR");
DateTimeFormatter formatter = DateTimeFormatter
    .ofLocalizedDateTime(FormatStyle.FULL)
    .withLocale(brazil);
String formatted = i.atZone(zone).format(formatter);
System.out.println(formatted);
sexta feira,2017年11月3日04:37:44巴西利亚河畔

Calendar.getTime …因为calendar.getTime不返回java.util.Date的新实例

正是这样。以下是JDK 10中的实现:

public final Date getTime() {
    return new Date(getTimeInMillis());
}
链接
解释如何使用java.time。

请避免同时使用日历或日期,最好使用日期不引用日历,因此更改日期不会更改日历。不返回java.util.Date的新实例,你到底为什么会这样想?当然,它每次都会返回一个新实例。这太奇怪了!返回引用将节省内存…请编辑您的问题,使问题标题更具体。照目前情况看,它不符合公认的答案。还有:比正常代码多的是什么?Java是一种高级语言。不是最高的,但从总体上看,可能比所有语言的95%更简洁。Python比Java更抽象,但Java比汇编更简洁。