是否可以创建一个日历对象,如Tue Mar 03 13:43:00(没有时区)?

时间:2009-03-06 20:29:09

标签: java calendar timezone

我要求发送带有时区的日历对象,例如Tue Mar 03 13:43:00。我知道Calendar对象总是返回Tue Mar 03 13:43:00 CST 2009,那么如何在没有时区的情况下创建呢?

4 个答案:

答案 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表示时间的情况下及时表示实例?

因此,需要考虑以下几点:

  1. 您说您需要将此日历传递给其他组件 - 该API是否关注日历中的TimeZone?该API是否会忽略TimeZone设置,使用它来计算与其本地时区的时差等?
  2. 您是否知道可以轻松更改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
    
  3. Calendar上的Javadoc,TimeZone

答案 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"));