SimpleDateFormat解析日期在某些Android设备上有所不同
我正在解析日期:
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
这会在服务器端抛出exception。
但在其他设备上,它发送日期为:
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
)
区别在于设备上设置的不同区域设置。
要缓解区域设置差异,应在格式化日期字符串时使用特定区域设置。 以下是我的代码中的示例,解决了同样的问题:
new SimpleDateFormat(C.FORMAT_DATETIMEZ, Locale.US).format(new Date(time))
您可以扩展SimpleDateFormat并覆盖其格式(…)函数,如下所示:
public class ExSimpleDateFormat extends SimpleDateFormat{ private static final long serialVersionUID = -8275126788734707527L; public ExSimpleDateFormat() { super(); } public ExSimpleDateFormat(String string, Locale us) { super(string, us); } @Override public StringBuffer format(Date date, StringBuffer toAppendTo, java.text.FieldPosition pos) { final StringBuffer buf = super.format(date, toAppendTo, pos); buf.insert(buf.length() - 2, ':'); return buf; }; }
并执行以下代码:
Calendar ca = Calendar.getInstance(); ca.setTimeInMillis(System.currentTimeMillis()); ExSimpleDateFormat exSimpleDateFormat = new ExSimpleDateFormat("dd-MM-yyyy HH:mm:ss 'GMT'Z", Locale.US); exSimpleDateFormat.setTimeZone(ca.getTimeZone()); //your device timezone which can be GMT+xx:yy or GMT-xx:yy String desiredTime = exSimpleDateFormat.format(ca.getTime());
输出将如下:23-03-2015 23:12:52 GMT + 05:00
如果有帮助,请告诉我。 谢谢
- java.lang.OutOfMemoryError:在OOM之前分配分配失败
- 如何安装“Android支持库”以将Gluon Mobile应用程序部署到Android?
- 在Android中创建CDMA(3gpp2)PDU
- 在Android中的蓝牙连接期间,不会创建连接(失败或中止)exception
- 如何重置ImageView的位置?
- 我仍然可以使用eclipse进行Android项目吗?
- Android 4 JSON生成错误:我可以使用比捆绑版本更新版本的org.JSON库吗?
- 找不到适合ArrayAdapter的构造函数(MainListActivity.GetBlogPostsTask,int,String )
- 如何在Qt中为Android保持屏幕?