Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以创建日历对象,如3月3日星期二13:43:00(无时区)?_Java_Calendar_Timezone - Fatal编程技术网

Java 是否可以创建日历对象,如3月3日星期二13:43:00(无时区)?

Java 是否可以创建日历对象,如3月3日星期二13:43:00(无时区)?,java,calendar,timezone,Java,Calendar,Timezone,我需要发送带有时区的日历对象,如3月3日星期二13:43:00。我知道Calendar对象总是返回2009年3月3日星期二13:43:00 CST,因此我如何在没有时区的情况下创建它?您可以使用类(更具体地说是具体的子类)按自己的意愿格式化日期。以下是一个例子: Calendar cal = Calendar.getInstance(); DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss"); String dateSt

我需要发送带有时区的日历对象,如
3月3日星期二13:43:00
。我知道Calendar对象总是返回2009年3月3日星期二13:43:00 CST,因此我如何在没有时区的情况下创建它?

您可以使用类(更具体地说是具体的子类)按自己的意愿格式化日期。以下是一个例子:

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
Fri Mar 06 15:50:26您可以使用一个简单的日期对象

Date d = new Date();
Date d2 = calendar.getTime();
或者更简单的,以毫秒为单位的时间

long time = System.currentTimeMillis();

为避免时区混淆,我建议将所有日期/时间存储并设置为标准时区,如GMT+0,然后根据需要转换显示时间等。

在重新阅读您的问题和您对我的另一个答案的评论后,问题似乎是您希望结果是日历对象,而不是字符串。因此,这不是设置日历的字符串表示形式的问题

在本例中,您所问的问题在技术上是不可能的:Calendar类的所有实现都表示一个内部时间,该时间存储为自Unix纪元(1970年1月1日00:00 GMT)以来的毫秒数。波士顿的“上午5:00”时间与西雅图的“上午5:00”时间不同——它们有不同的内部时间戳

你最好的选择是在任何地方使用相同的时区,而GMT可能是最有意义的:

cal.setTimeZone(TimeZone.getTimeZone("GMT+0000"));

没有时区的日历对象是不可能的。真的,这没有任何意义-Calendar试图表示“”-在不知道所表示的时间所在的时区的情况下,如何在时间上表示实例

因此,有几件事需要考虑:

  • 您说您需要将此日历传递给其他组件-该API是否关心日历所在的时区?API是否会忽略时区设置,使用它来计算与自己的本地时区的时差,等等
  • 您是否知道可以轻松更改日历实例的时区

    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
    

  • ,上的Javadocs。

    感谢您的回复,但我调用的服务正在查找Calendar对象,因此我无法使用DateFormat…Calendar.getTime()返回日期对象。。查看我刚刚发布的代码。感谢Kip共享代码,但它仍然无法解决我的问题,因为我需要将日历对象传递给带有时区或不带时区的服务,是哪个?你的问题和它的标题互相矛盾。@kamal:我试图澄清你的问题。如果我误解了,请更正。我正在寻找一个没有时区的日历对象。顺便说一句,它看起来像日历。setTimeZone(null)会导致一些错误;这似乎支持这样一种观点,即日历与时区非常紧密地联系在一起,并且需要它的时区参考。