结果不正确:格式化ISO-8601时间并提取12小时时间

时间:2012-12-14 11:54:33

标签: android facebook datetime facebook-fql iso8601

我使用FQL从Facebook API获取新闻源,它将“created_time”字段作为UNIX时间戳返回。我正在使用这段代码转换成我认为是ISO-8601的时间戳:

String getInitialCreatedTime = JOFeeds.getString("created_time");
long finalTimeStamp = Long.valueOf(getInitialCreatedTime);
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ");
String finalCreatedTime = dateFormatter.format(new Date(finalTimeStamp * 1000L));

现在,从字符串,finalCreatedTime我想提取12小时(上午/下午)格式的时间。

为此,我正在使用此代码:

final String old_format = "yyyy-MM-dd'T'HH:mm:ssZ";
final String new_format = "EEE MMM d hh:mm aa yyyy";

String oldDateSring = finalCreatedTime;

SimpleDateFormat sdf = new SimpleDateFormat(old_format);
Date d = sdf.parse(oldDateSring);
sdf.applyPattern(new_format);

Calendar cal = Calendar.getInstance();
cal.setTime(d);

// GET THE TIME
SimpleDateFormat sdfTimeFormatter = new SimpleDateFormat("hh:mm aa");
String getTime = sdfTimeFormatter.format(cal.getTime());
feeds.setTime(getTime);
Log.e("TIME", getTime);

第一个代码块的结果是:2012-12-14T04:30:03+0530

// GET THE TIME阻止的结果为04:30AM时应为04:30PM

我将不胜感激。也许,我执行错了?

编辑:我可以补充一点,正确处理下午12点到下午1点之间的时间戳,并按照应有的方式显示PM。

1 个答案:

答案 0 :(得分:1)

你有:

String getInitialCreatedTime = JOFeeds.getString("created_time");
long finalTimeStamp = Long.valueOf(getInitialCreatedTime);
// Note 8601 is written with 'HH'
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

到目前为止,这么好。但是你需要从中创建一个日期。

Date date = new Date(finalTimeStamp * 1000L)

然后,您需要格式化您需要的内容(并且永远不要解析您刚刚格式化的日期。这根本没有意义。)

String finalCreatedTime = dateFormatter.format(date); // Not sure if you need this one

SimpleDateFormat sdfTimeFormatter = new SimpleDateFormat("hh:mm aa");
String getTime = sdfTimeFormatter.format(date);
feeds.setTime(getTime);