当前位置: 首页 > 面试题库 >

在没有任何库的Java / Android中解析UNIX日期中的JSON日期

康文昌
2023-03-14
问题内容

我从服务器收到了JSON数组。我获得一个日期作为时间戳字符串(例如),[{"date": "1418056895", ... }]并且我需要将其解析为我们的日格式。我该怎么做呢?我曾尝试过,但我总是将年份定为1970。

注意:我的JSON格式是UNIX。

JSONObject feedObj = (JSONObject) feedArray.get(i);
FeedItem item = new FeedItem();
item.setTimeStamp(feedObj.getString("date"));


public void setTimeStamp(String timeStamp) {
    this.timeStamp = timeStamp;
}

public String getTimeStamp() {
    return timeStamp;
}

在另一个类中,我解析时间戳以显示它:

List<FeedItem> feedItems = ...;
FeedItem item = feedItems.get(position);
CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
            Long.parseLong(item.getTimeStamp()),
           System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);

但是,显示的日期始终是1970。

使用1403375851930看起来像预期的那样的值(它显示一个现代日期)。


问题答案:

如果您正确解析JSON,

feedObj.getString("date");

保留您的日期。您正在以String形式读取日期。您必须将其转换为long。

public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    Long timestamp = Long.parseLong("1418056895"); //Long.parseLong(feedObj.getString("date"));
    cal.setTimeInMillis(timestamp * 1000L);
    DateFormat format = new SimpleDateFormat("MM/dd/yyyy"); // what ever format you need.
    System.out.println(format.format(cal.getTime())); // this will be in MM/dd/yyyy
    //item.setTimeStamp(format.format(cal.getTime()));
}

您还可以使用 feedObj.getLong(“ date”) ; 直接获取长格式的Date,但这取决于您使用的JSON库。



 类似资料:
  • 问题内容: 我知道这个问题已经问了很多,显然你不能解析任何日期。但是,我发现python-dateutil库能够解析我向它抛出的每个日期,而在找出日期格式字符串方面绝对需要零的工作。Joda time始终被当作是出色的Java日期解析器而出售,但是它仍然需要你在选择格式(或创建自己的格式)之前确定日期的格式。你不能只调用DateFormatter.parse(mydate)并神奇地获取Date对象

  • 问题内容: 我从android应用中的服务器获取了一个1970年后毫秒数的json字符串。 看起来是这样的:。 如何将其解析为Java日历对象,或者仅从中获取一些日期值?我应该从正则表达式开始,只是得到millisecons吗?服务器是.NET。 谢谢 问题答案: 时间似乎也有时区,所以我会做这样的事情:

  • 问题内容: 在我的应用程序中,我通过使用SharedPreferences将其作为长字符串写出到文件中来保留CookieStore。重新读回此String时,我使用regexps从String解析每个cookie及其属性(名称,值,域,路径,版本,到期日期)。解析这些属性时,我通过为每个解析的cookie创建一个新的BasicClientCookie对象来重建一个CookieStore,然后将每个

  • 问题内容: 我正在尝试解析json请求中的Datetime。该请求看起来像这样: 它被解码成的结构看起来像这样: 解码行如下所示: Revel返回此错误: 根据此处的revel文档,https://revel.github.io/manual/parameters.html 在同一文档中,他们还说您可以附加如下格式: 为了验证格式是否在数组中,我尝试了以下方法: 在绝望的最后一幕中,我尝试以rev

  • 问题内容: 我正在尝试解析由tar生成的时间戳,例如“ 2011-01-19 22:15”,但无法计算出time.Parse的时髦API。 以下产生“解析时间“ 2011-01-19 22:15”:超出范围的月份” 问题答案: 请遵循Go 时间包文档中的说明。 布局中使用的标准时间为: 2006年1月2日星期一1:04:05 MST(MST是GMT-0700) 现在是Unix时间。(将其视为。)要

  • 问题内容: 我需要解析Java中日期的RFC 2822字符串表示形式。示例字符串在这里: 星期六,2010年3月13日11:29:05 -0800 看起来很讨厌,所以我想确保自己做得对,以后会遇到奇怪的问题,原因可能是由于AM-PM /军事时间问题,UTC时间问题,我无法预料的问题等原因导致日期解释错误… 谢谢! 问题答案: 这是完成您要求的快速代码(使用 SimpleDateFormat ) P