我需要发送带有时区的日历对象,例如Tue Mar 03 13:43:00
. 我知道 Calendar 对象总是返回Tue Mar 03 13:43:00 CST 2009
,那么如何在没有时区的情况下创建它?
kamal
问问题
1099 次
4 回答
1
没有 TimeZone 的 Calendar 对象是不可能的。真的,这没有任何意义——日历试图表示“特定的时间瞬间”——你怎么能在不知道你所代表的时间所在的 TimeZone 的情况下及时表示一个实例?
所以,有几点需要考虑:
- 您说您需要将此日历传递给其他一些组件-该 API 是否关心日历所在的 TimeZone?该 API 是否会忽略 TimeZone 设置,使用它来计算与它自己的本地时区的时差等?
您是否知道可以轻松更改日历实例的时区?
Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getDefault()); // returns default TimeZone for your system cal.setTimeZone(TimeZone.getTimeZone("EST")); // Eastern Standard Time cal.setTimeZone(TimeZone.getTimeZone("Asia/Kolkota"); // UTC+5:30
于 2009-03-07T04:47:52.580 回答
1
您可以使用DateFormat类(更具体地说是SimpleDateFormat具体子类)来根据需要格式化日期。这是一个例子:
Calendar cal = Calendar.getInstance();
DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss");
String dateString = format.format(cal.getTime()));
印刷:
周五 3 月 6 日 15:50:26
于 2009-03-06T20:34:58.257 回答
0
您可以使用简单的 Date 对象;
Date d = new Date();
Date d2 = calendar.getTime();
或者更简单的,以毫秒为单位的时间。
long time = System.currentTimeMillis();
为避免时区混淆,我建议将所有日期/时间存储并设置为标准时区,例如 GMT+0,然后根据需要转换显示时间等。
于 2009-03-06T21:14:11.563 回答
0
在重新阅读您的问题和您对我的其他答案的评论后,听起来问题是您希望结果是日历对象,而不是字符串。所以这不是格式化日历的字符串表示的问题。
在这种情况下,您要问的问题在技术上是不可能的:Calendar 类的所有实现都存在以表示内部时间,该时间存储为自 Unix 纪元(1970 年 1 月 1 日 00:00 GMT)以来的毫秒数。波士顿的时间“5:00 am”与西雅图的“5:00 am”不同——它们有不同的内部时间戳。
您最好的选择是在任何地方都使用相同的时区,而 GMT 可能最适合此目的:
cal.setTimeZone(TimeZone.getTimeZone("GMT+0000"));
于 2009-03-06T21:22:52.087 回答