我要求发送带有时区的日历对象,例如Tue Mar 03 13:43:00
。我知道Calendar对象总是返回Tue Mar 03 13:43:00 CST 2009
,那么如何在没有时区的情况下创建呢?
答案 0 :(得分:1)
您可以使用DateFormat类(更具体地说是SimpleDateFormat具体子类)来根据需要设置日期格式。这是一个例子:
Calendar cal = Calendar.getInstance();
DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss");
String dateString = format.format(cal.getTime()));
打印:
Fri Mar 06 15:50:26
答案 1 :(得分:1)
没有TimeZone的日历对象是不可能的。真的,这没有任何意义 - 日历试图表示“a specific instant in time” - 如何在不知道TimeZone表示时间的情况下及时表示实例?
因此,需要考虑以下几点:
您是否知道可以轻松更改Calendar实例的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
答案 2 :(得分:0)
您可以使用简单的Date对象;
Date d = new Date();
Date d2 = calendar.getTime();
或更简单,以毫秒为单位的时间。
long time = System.currentTimeMillis();
为避免混淆时区,我建议将所有日期/时间存储和设置为标准时区,例如GMT + 0,然后根据需要转换显示时间等。
答案 3 :(得分:0)
在重新阅读您的问题和您对我的其他答案的评论时,听起来问题是您希望结果是Calendar对象,而不是String。所以这不是格式化Calendar的String表示的问题。
在这种情况下,您所要求的在技术上是不可能的:Calendar类的所有实现都存在以表示内部时间,该时间存储为自Unix纪元(1970年1月1日00:00 GMT)以来的毫秒数。波士顿的“早上5点”与西雅图的“早上5点”不同 - 它们有不同的内部时间戳。
你最好的选择是在任何地方使用相同的时区,并且GMT可能最适合这个目的:
cal.setTimeZone(TimeZone.getTimeZone("GMT+0000"));