【发布时间】:2015-05-26 18:25:23
【问题描述】:
我将日期解析为:
public class Consts{
public static final SimpleDateFormat DATE_FORMATTER_WITHOUT_TIME_ZONE = new SimpleDateFormat(
"yyyy-MM-dd HH:mm");
public static final SimpleDateFormat DATE_FORMATTER_2 = new SimpleDateFormat(
"MM-dd-yyyy HH:mm:ss ZZZZ");
}
cDate = new GregorianCalendar();
sDate = new GregorianCalendar();
eDate = new GregorianCalendar();
if (mStartTimeTV.getText().toString().equals("Now")) {
sDate.setTime(cDate.getTime());
} else {
sDate.setTime(Consts.DATE_FORMATTER_WITHOUT_TIME_ZONE
.parse(mStartTimeTV.getText().toString()));
}
if (!mEndTimeTV.getText().toString().equals("")) {
eDate.setTime(Consts.DATE_FORMATTER_WITHOUT_TIME_ZONE
.parse(mEndTimeTV.getText().toString()));
} else {
eDate.setTime(sDate.getTime());
// eDate = sDate;
}
然后我在发送到服务器之前将日期格式化如下:
request.addProperty("StartTime",
Consts.DATE_FORMATTER_2.format(sDate.getTime()));
request.addProperty("EndTime",
Consts.DATE_FORMATTER_2.format(eDate.getTime()));
但问题是在运行 4.1.2 的设备上,它发送的日期为:
Start Date: 03-23-2015 21:17:20 +0500
End Date : 10-23-2015 21:15:00 +0500
在服务器端引发异常。
但在其他设备上,它发送日期为:
Start Date: 03-23-2015 21:12:13 GMT+05:00
End Date : 03-23-2015 21:16:00 GMT+05:00
这是必需的。
我做错了吗?我怎样才能防止这个问题,以便所有设备发送相同的日期。 (例如03-23-2015 21:16:00 GMT+05:00)
【问题讨论】:
-
我没有看到an issue for this。你能确认你在模拟器上得到了同样的行为吗?还是来自某些制造商的设备?
-
我已经在运行 4.1.1 的 Geny 运动模拟器上进行了尝试,它运行良好。运行 4.1.2 的三星和 HTC 存在问题。
-
试用官方 Android SDK 模拟器。 Genymotion 应该镜像它,因为它也是基于 AOSP,所以官方模拟器将是一个更好的兼容性测试。如果这只发生在这些设备上,您可能需要查看服务器是否可以支持不同的时区编码,或者可能切换到
SimpleDateFormat以外的其他内容(例如 Joda Time)。 -
您应该始终使用 joda-time 而不是 JDK 日历/日期混乱
-
你们能告诉我如何将日期格式化为:
03-23-2015 21:16:00 GMT+05:00,我尝试过DateTimeFormatter DATE_FORMATTER_2 = DateTimeFormat .forPattern("MM-dd-yyyy HH:mm:ss z");和DateTimeFormatter DATE_FORMATTER_2 = DateTimeFormat .forPattern("MM-dd-yyyy HH:mm:ss zzzz"),但没有运气。
标签: java android date datetime simpledateformat