【发布时间】:2016-01-01 17:57:31
【问题描述】:
我正在编写一个简单的代码以从服务器获取 UTC 日期,然后根据前面提到的 timeDiff 将其转换为本地时间。下面是简单的代码:
来自 App.Constants 接口:
SimpleDateFormat SDF_yyyyMMdd_HHmmss_SSS = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS", Locale.ENGLISH);
public String getEnddate(Context context) throws ParseException {
Date date = App.Constants.SDF_yyyyMMdd_HHmmss_SSS.parse(enddate);
Log.d("Check these dates", "Check dates EventEnd: " + enddate + date.toString());
MyDate tmpDate = new MyDate(date); //May ignore this
return tmpDate.toSQLite(App.getTimeDiff(context)); //May ignore this
}
虽然我得到的结果很有趣。虽然 80% 的日期被正确转换,但随机: 1. 在某些情况下,SDF 会返回当前日期和时间 2. 在某些情况下,自卫队的返回时间正好延迟了一个月。
以下是从日志中选定的行转储。在下面的前三个实例中,返回的日期是当前日期。在第四个例子中,日期延迟了一个月,但返回的时间是当前时间。在最后一种情况下,返回的日期与原始日期相比正好延迟了一个月。
01-01 21:33:30.869 24135-24135/? D/检查这些日期:检查日期 EventEnd: 20151222_003819_453Fri Jan 01 21:33:19 IST 2016
01-01 21:33:30.900 24135-24135/? D/检查这些日期:检查日期 EventEnd: 20151222_004950_104Fri Jan 01 21:33:50 IST 2016
01-01 21:33:30.961 24135-24135/? D/检查这些日期:检查日期 EventEnd: 20151226_235500_000Fri Jan 01 21:33:30 IST 2016
01-01 21:33:30.971 24135-24135/? D/检查这些日期:检查日期 EventEnd:20151227_060800_000Wed Jan 27 21:33:00 IST 2016
01-01 23:17:07.977 31293-31293/? D/检查这些日期:检查日期 EventEnd: 20151222_195508_303Fri Jan 22 19:55:08 IST 2016 0
希望有人可以提供帮助。否则,我只是太想写我自己的字符串到日期转换。我真的希望我不必!!!
编辑: 太不耐烦了,很快就写了下面的解析器。使用此解析器,代码可以正常工作,正如预期的那样。但不是 SimpleDateFormat。
public static Date localDateParser(String yyyyMMdd_HHmmss_SSS){
int year = Integer.parseInt(yyyyMMdd_HHmmss_SSS.substring(0, 4));
int month = Integer.parseInt(yyyyMMdd_HHmmss_SSS.substring(4, 6)) - 1;
int day = Integer.parseInt(yyyyMMdd_HHmmss_SSS.substring(6, 8));
int hour = Integer.parseInt(yyyyMMdd_HHmmss_SSS.substring(9, 11));
int minute = Integer.parseInt(yyyyMMdd_HHmmss_SSS.substring(11, 13));
int second = Integer.parseInt(yyyyMMdd_HHmmss_SSS.substring(13, 15));
// int ms = Integer.parseInt(yyyyMMdd_HHmmss_SSS.substring(16));
GregorianCalendar cal = new GregorianCalendar(year, month, day, hour, minute, second);
new Date(cal.getTimeInMillis()).toString());
return new Date(cal.getTimeInMillis());
}
【问题讨论】:
-
可以打印原始字符串吗?
标签: android date simpledateformat