Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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-创建没有时区的日历_Java_Datetime_Timezone - Fatal编程技术网

Java-创建没有时区的日历

Java-创建没有时区的日历,java,datetime,timezone,Java,Datetime,Timezone,我想首先说,我读过几篇类似于这篇文章的文章,但没有一篇真正解决了我的问题。 我还要声明,我曾尝试使用SimpleDateFormat和joda.DateTime,但没有成功 问题如下: 我有一个日历对象,它保存关于特定日期的信息:2008-04-30T00:00:00Z 使用calendar.getTime()方法时,我可以得到不同的结果,因为我知道该方法正在查找本地值 因此: 但是我想得到一个Date对象,它只保存日期和时间值“2008-04-30T00:00:00”,完全忽略任何时区 我该怎

我想首先说,我读过几篇类似于这篇文章的文章,但没有一篇真正解决了我的问题。 我还要声明,我曾尝试使用
SimpleDateFormat
joda.DateTime
,但没有成功

问题如下:

我有一个日历对象,它保存关于特定日期的信息:2008-04-30T00:00:00Z 使用
calendar.getTime()方法时,我可以得到不同的结果,因为我知道该方法正在查找本地值

因此:

但是我想得到一个Date对象,它只保存日期和时间值“2008-04-30T00:00:00”,完全忽略任何时区

我该怎么做

正如我之前提到的,我试图使用
SimpleDateFormat sf=新的SimpleDateFormat(“yyyy-MM-dd'T'HH:MM:ss”)
但我总是得到同样的结果

任何帮助都将不胜感激
干杯。

您是否使用标准构造函数初始化日历?如果使用允许指定时区和区域设置的构造函数,会怎么样

protected Calendar(TimeZone zone, Locale aLocale)

日历
日期
如果没有
时区
就没有任何意义

日历和日期如果没有时区,就不能存在

你不能完全忽略任何时区

您可以创建格林威治标准时间(偏移量为零)的日历,如下所示:

    TimeZone zone = TimeZone.getTimeZone("Etc/GMT");
    Calendar cal = Calendar.getInstance(zone);
这表示仅在GMT时区中有意义的日期/日历


听起来你想要一个时间戳,它代表时间上的一个瞬间。

很旧,但仍然不正确

“使用calendar.getTime()方法时,我可以得到不同的结果,因为我知道该方法正在查找本地值”

这是一种误解。getTime()将仅获取毫秒。以格林尼治标准时间计算


只有在格式化输出时,时区才变得相关。由于原始海报没有显示代码,因此无法确定错误发生的位置。

发现您可以使用以下代码清除时区:

Calendar cal=Calendar.getInstance();

校准清除(日历区域偏移)

正如其他人所指出的,
日历
日期
对象如果没有时区就不可能存在

我相信您可能希望将Java 8中引入的类与新的时间API一起使用:

LocalDateTime literal = LocalDateTime.of(2008, 4, 30, 0, 0, 0);
LocalDateTime parsed = LocalDateTime.parse("2008-04-30T00:00:00"); // ISO-8601 by default
Assert.assertEquals(literal, parsed);

您能提供您尝试过的示例吗?我尝试过以下方法:SimpleDataFormat sf=new SimpleDataFormat(“yyy-MM-dd'T'HH:MM:ss”);sf.setTimeZone(TimeZone.getTimeZone(“UTC”));解析(值)//值为'2008-04-30T00:00:00Z'您不能拥有没有时区的日历。日历的概念取决于时区,否则它就没有意义了。实际上我也尝试过这样做:Calendar.getInstance(timezone\UTC,Locale.UK);但它返回的值与:UK:2008-04-30T01:00:00.000+0100相同。每个日历实例都将始终具有与其关联的时区。这就是它们的工作原理。这实际上帮助了我-这在我们不需要关心时区的应用程序中非常有用。除了时区-我们还可以清除很多其他内容,如-小时,分钟,毫秒-所有这些字段都可以在这里找到这是一个狗屎答案,因为你可以清楚地使用没有时区的日期,然后使用带有清除时区信息的日历来实际处理值。如果应用程序只存在于一个时区中,则可以安全地忽略时区。问题是,当您得到一个
日期
值并且忽略该日期的时区时(您得到的是长值)
日历
将被您的时区关闭,与所有操作相关。
LocalDateTime literal = LocalDateTime.of(2008, 4, 30, 0, 0, 0);
LocalDateTime parsed = LocalDateTime.parse("2008-04-30T00:00:00"); // ISO-8601 by default
Assert.assertEquals(literal, parsed);