java - 从尊重时区的日历对象中获取格式化字符串的最简单方法是什么?

标签 java date datetime calendar timezone

当我在网上搜索“如何将 Calendar 转换为 String”时,我找到的所有结果都建议先转换为 Date然后转换 DateString .

问题是 Date仅表示自纪元以来的毫秒数 - 它不考虑时区。 Calendar这种方式更先进。

当然可以调用个人Calendar.get创建我自己的格式化字符串的方法,但肯定有更简单的方法吗?

为了说明,我写了这段代码:

long currentTime = Calendar.getInstance().getTimeInMillis();
Calendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));
calendar.setTimeInMillis(currentTime);
System.out.println(calendar.getTime().toString());
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));

在晚上 8 点 02 分从位于伦敦 (UTC+0) 的一台机器上运行这段代码时,我得到了以下结果:

Wed Nov 18 20:02:26 UTC 2015
2015-11-18 20:02:26
21

最后一行显示了根据日历时区(马德里为 UTC+1)的实际时间。现在是马德里晚上 9:02,但显然都是本地人 Date.toString以及 DateFormat.format方法会忽略时区,因为调用时会删除时区信息 Calendar.getTime (类似 Calendar.getTimeInMillis )。

鉴于此,从 Calendar 中获取格式化字符串的最佳方法是什么?哪个尊重时区?

最佳答案

在 SimpleDateFormat 对象上设置时区,然后使用 z ..

sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));
System.out.println(sdf.format(calendar.getTime());

关于java - 从尊重时区的日历对象中获取格式化字符串的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33789460/

相关文章:

java - 更改字体时 JTextField 大小发生变化

Python - 100万行表中日期的向量化差异

.net - 是否有.NET方式来存储类似于自定义类的时间段?

mysql - 根据行值和时间戳计算日期

python - 有效解析文本文件的日期时间

java - SOAP Web 服务是否只支持 "POST"http 方法

java - 在 Android 的 Canvas 中绘制文本

java - 如何输入在 Selenium webdriver 中选择的右键单击选项的名称

Java 7 NIO.2 Files.getLastModifiedTime 时区

python - 如何在 Python 中解释原始的 RFC 3339 日期时间字符串?