将Java日历转换为ISO的最简单方法

将Java日历转换为ISO的最简单方法,java,date,java-calendar,Java,Date,Java Calendar,我有一个以以下格式返回的日历(它是Java日历类型):2020-02-15T00:00:00。 最简单、最短的方法是什么,可以将其转换为以下类似的日历并保留日历类型:2018年11月5日星期一14:08:58 GMT+0000(格林威治标准时间) 在JavaScript中,我们可以使用类似于var date=new date()的东西您可以使用 假设您有一个Calendar cal实例,您应该能够执行以下操作: SimpleDateFormat dateFormat = new SimpleDa

我有一个以以下格式返回的日历(它是Java日历类型):
2020-02-15T00:00:00
。 最简单、最短的方法是什么,可以将其转换为以下类似的日历并保留日历类型:
2018年11月5日星期一14:08:58 GMT+0000(格林威治标准时间)

在JavaScript中,我们可以使用类似于
var date=new date()的东西

您可以使用


假设您有一个Calendar cal实例,您应该能够执行以下操作:

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z");
String result = dateFormat.format(cal.getTime());
getTime为您提供SimpleDateFormat的日期


这是处理日历对象的最简单方法。也是最容易出错的一个。我同意所有关于您应该使用java.time的评论,但我是谁来告诉您该怎么做呢。

下面是一个使用java 8中引入的日期API将字符串转换为示例格式的示例:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

class Scratch {
    public static void main(String[] args) {

        String input = "2020-02-15T00:00:00";

        LocalDateTime parsedTime = LocalDateTime.parse(input);

        ZonedDateTime zonedDateTime = ZonedDateTime.of(parsedTime, ZoneId.of("GMT"));

        String output = DateTimeFormatter.ofPattern("EEE MMM dd yyyy HH:mm:ss Z '('z')'")
                .format(zonedDateTime);

        System.out.print(output);
    }
}
日期时间对象没有“格式” 我有一个以以下格式返回的日历(它是Java日历类型):2020-02-15T00:00:00

不,你没有

日历
对象没有格式。只有表示日期时间值的文本具有格式

以下日历与此类似,并保留日历类型:周一2018年11月5日14:08:58 GMT+0000(格林威治标准时间)

没有具有该格式的
日历
对象,因为
日历
没有格式,也不是文本

学习在发布前搜索堆栈溢出。这已经被讨论过很多次了

java.time 可怕的
Calendar
类在几年前被java.time类取代,并采用了JAR310。切勿使用
日历

使用
OffsetDateTime
类获取当前UTC时间

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;
要生成标准ISO 8601格式的文本,请调用
toString
。要将日期时间值持久化为文本,请使用这些格式——这就是它们被发明的原因

要以另一种格式生成文本,请使用
DateTimeFormatter
类。这已经被讨论过很多次了,所以搜索堆栈溢出

转换 如果给定一个
GregorianCalendar
对象,则通过调用添加到旧遗留类中的新方法,立即将其转换为
ZoneDateTime
对象

ZonedDateTime zdt = myGregCal.toZonedDateTime() ; 
如果需要的话就投吧

ZonedDateTime zdt = ( (GregorianCalendar) myCal ).toZonedDateTime() ; 

然后使用
DateTimeFormatter
生成所需格式的文本

到目前为止,您尝试过什么吗?您应该使用
Java.Time
包中的新Java时间API。
Calendar
Date
SimpleDateFormat
类已经过时。我建议您使用java 8 it中生产的新Api,它是
LocalDate
,比Calendar容易得多。对不起,我无法理解这个问题<代码>2020-02-15T00:00:00
为ISO 8601格式<代码>2018年11月5日星期一14:08:58 GMT+0000(格林威治标准时间)不是。另外,
Calendar
没有格式,因此无法以您所说的格式返回。类
Calendar
早已过时,设计也很糟糕。你为什么要坚持这一点?我会保留一个
即时
(来自java.time的类,现代java日期和时间API),或者如果不可行,则保留它的字符串表示(来自它的
toString
方法;它遵循ISO 8601)。你的问题听起来很像一个日历,所以请提供更多的上下文,说明为什么你认为你需要它。无法解析日历。它不是一个字符串。但不知怎的,你可以看到这个值。。。那么
toString()
方法呢?请不要教年轻人使用早已过时且臭名昭著的
SimpleDataFormat
类。至少不是第一个选择。而且不是毫无保留的。今天我们有了更好的in和它的
DateTimeFormatter
。这不是日历,而是字符串。@Laziotibjczyk更新为使用字符串而不是日历类。请不要教年轻人使用过时且臭名昭著的
SimpleDateFormat
类。至少不是第一个选择。而且不是毫无保留的。今天,我们在及其
DateTimeFormatter
中有了更好的功能。我也更喜欢新的java.time api,但如果他得到了一个过时的日历对象,那么为了简洁起见,他最好使用旧的库?特别是如果他问的是最简单的方法。考虑到我经常问的一个事实,我一定很难找到那些被多次提及的话题。至少指向正确的方向会有帮助。@laziotibjczyk。前两篇文章介绍了您的主题,并解释了现代java.time类。
ZonedDateTime zdt = ( (GregorianCalendar) myCal ).toZonedDateTime() ;