根据日/月选择JSON

时间:2018-02-15 22:15:01

标签: java android arrays json date

我正在阅读的.json文件中有以下JSON条目。

有许多JSON条目,每个条目都保持相同的格式。最初的两个值指定日期和月份:

[["1","12","06:26","08:03","12:09","13:46","14:17","16:05","17:42"]

因此,最初的"1""12"将等同于1st of December

有人可以帮我写一个方法,只要读入JSON,设备就会使用设备日/月来检查应用程序界面上显示哪个JSON数组?

2 个答案:

答案 0 :(得分:2)

我不是JSON的专家,但我知道几天和几个月。所以这里是如何根据您的设备检查JSON数组中的这两个值是否表示今天的日期:

    MonthDay today = MonthDay.now(ZoneId.systemDefault());
    try {
        if (MonthDay.of(Integer.parseInt("12"), Integer.parseInt("1")).equals(today)) {
            System.out.println("This is the array to display today");
        }
    } catch (NumberFormatException nfe) {
        System.out.println("Day or month from array was not a number: " + nfe.getMessage());
    }

我正在使用并推荐java.time,现代Java日期和时间API。

ZoneId.systemDefault()是我尝试获取设备的时区设置。但要注意,我只获得了JVM的时区设置,但并不总是一样。例如,JVM设置可能已被程序的其他部分或运行在同一JVM中的其他程序更改。

如何从每个JSON数组中获取这些字符串还取决于您用于解析JSON的库。

问题:我可以在Android上使用java.time吗?

是的,您可以在Android上使用java.time。它只需要至少Java 6

  • 在Java 8及更高版本和更新的Android设备上,内置了现代API。
  • 在Java 6和7中获取ThreeTen Backport,新类的后端端口(适用于JSR 310的ThreeTen;请参阅底部的链接)。
  • 在较旧的Android上使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接

答案 1 :(得分:0)

首先,要检索当前日期和月份,我将使用以下代码:

 Calendar instance = Calendar.getInstance();
 currentMonth = instance.get(Calendar.MONTH);
 currentDay = instance.get(Calendar.DAY);

 int month=currentMonth+1;

在此之后,你需要通过创建一个json数组,然后一个json对象从json字符串中获取数据,并从字符串中过滤掉特别需要的字符串(日和月)。

JSONArray arr = new JSONArray(result);
JSONObject jObj = arr.getJSONObject(0);
String day = jObj.getString("Day");
String month = jObj.getString("Month");

现在,将所有日期都放在数组中。 然后,简单地将所有给定日期与当前日期进行比较。

问题是,你没有这样的前缀:

[{"Date":"2012-1-4T00:00:00","keywords":null, ... }]

需要这些来告诉从哪里提取字符串,所以你应该考虑更新你的JSON输出。