将Java日历转换为ISO的最简单方法
我有一个以以下格式返回的日历(它是Java日历类型):将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
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() ;