Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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
Android时间与Java时间之间的转换_Java_Android_Calendar - Fatal编程技术网

Android时间与Java时间之间的转换

Android时间与Java时间之间的转换,java,android,calendar,Java,Android,Calendar,在android手机(NexusOne)和java服务器之间进行时间转换时,我遇到了一些麻烦。我读过的所有东西都说它们是一样的,但当我从中转换一个长时间的戳记时,我似乎损失了1个小时(确切地说) 具体来说,如果我在android设备上运行以下代码,我会得到以下输出 代码: Calendar g = Calendar.getInstance(); g.setTimeInMillis(1340661899000L); Log.d(TAG, g.getTime().toLocaleString());

在android手机(NexusOne)和java服务器之间进行时间转换时,我遇到了一些麻烦。我读过的所有东西都说它们是一样的,但当我从中转换一个长时间的戳记时,我似乎损失了1个小时(确切地说)

具体来说,如果我在android设备上运行以下代码,我会得到以下输出

代码:

Calendar g = Calendar.getInstance();
g.setTimeInMillis(1340661899000L);
Log.d(TAG, g.getTime().toLocaleString());
Calendar g = Calendar.getInstance();
g.setTimeInMillis(1340661899000L);
System.out.println(g.getTime().toLocaleString());
输出: 2012年6月25日下午6:04:59

我认为这是正确的,但当我在java服务器上运行完全相同的代码时,我会在同一天但提前1小时得到一个响应

代码:

Calendar g = Calendar.getInstance();
g.setTimeInMillis(1340661899000L);
Log.d(TAG, g.getTime().toLocaleString());
Calendar g = Calendar.getInstance();
g.setTimeInMillis(1340661899000L);
System.out.println(g.getTime().toLocaleString());
输出: 2012年6月25日下午5:04:59


有人知道这是什么原因吗?服务器和手机都位于同一个位置(这并不重要),服务器盒和手机上的时钟都匹配

考虑到相差一个小时,您可以使用DST(夏令时)吗设置在服务器上而不是在电话上,反之亦然?

Chris想说的是,您的电话和服务器可能配置为不同的时区

尝试打印
cal.getTimeZone()
的结果。如果这是一个问题,您需要选择一个用于通信的时区。例如:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0"));
根据JavaDocs,日历实例使用以下报告的默认时区:

TimeZone.getDefault()

尽管您的服务器和手机被设置为相同的时区,但不一定意味着它们使用相同的默认时区。

您可能不希望在客户端和服务器之间的通信中使用本地化时间,因为您无法确定客户端上的时间区域设置。1340661899000L值不应是本地时间,我只是想显示设备时区中给定的时间。我建议您避免让客户端和服务器处于同一时区/模式。现在我觉得自己像个白痴。是的,由于某种原因,ToLocalString的电话版本没有考虑DST,即使电话上的时钟是正确的时间。@JohnS这就是为什么您应该避免使用本地日期时间值的一个例子。让您的数据通信、业务逻辑、数据存储和服务器时钟保持完整(很少有例外)。转换为本地时区仅在数据的用户或使用者预期时进行调整。