【问题标题】:Sort timestamps by date in Java在 Java 中按日期对时间戳进行排序
【发布时间】:2012-11-24 22:26:54
【问题描述】:

我的班级 Event 有很多不同的变量,例如 namedescriptionstart timeend time,然后我有 Day 具有可变日期的类和这些 Events 中的 ArrayList。现在我想要Days 的ArrayList,并且每个Day 都应该包含同一天的Events。默认情况下,我得到事件列表,我需要根据这个列表创建日期。所有时间均采用 int unix timestamp 格式。

举例说明我追求的是什么:

Day 25.11
Event1
Event2
Event3

Day 26.11
Event1

Day 27.11
Event1
Event2
Event3
Event4

有我试过的代码没有工作结果:

private void getObjects(String url) throws JSONException, Exception {
    JSONObject jsonObject = new JSONObject(new NetTask().execute(url).get());
        JSONArray job1 = jsonObject.getJSONArray("events");
        ArrayList<Event> events = new ArrayList<Event>();
        Calendar calPrev = Calendar.getInstance();
        boolean first = true;
        for (int i = 0; i < job1.length(); i++) {
            JSONObject myEventArray = job1.getJSONObject(i);
            int start = myEventArray.getInt("start");
            int end = myEventArray.getInt("end");
            String name = myEventArray.getString("name");
            String description = myEventArray.getString("description");

            if(first){
                calPrev.setTimeInMillis(start*1000L);
                events.add(new Event(start,end,name,description));
                first = false;
            }else{
                Calendar calCur = Calendar.getInstance();
                calCur.setTimeInMillis(start*1000L);

                if(calPrev.get(Calendar.YEAR) == calCur.get(Calendar.YEAR) && calPrev.get(Calendar.DAY_OF_YEAR) == calCur.get(Calendar.DAY_OF_YEAR)){
                    events.add(new Event(start,end,name,description));
                }else{
                    days.add(new Day(323,events)); // HERE I CREATE NEW DAY AND ADD IT TO ARRAY
                    events.clear();
                    events.add(new Event(start,end,name,description));
                }
            }
        }
    }

【问题讨论】:

    标签: android timestamp


    【解决方案1】:

    您可以使用此方法获取唯一日期,然后将每天的事件添加到哈希映射private HashMap&lt;Integer, ArrayList&lt;YourModel&gt;&gt; eventInfo = new HashMap&lt;Integer, ArrayList&lt;YourModel&gt;&gt;();

    private List<String> getUniqueDays(List<YourModel> list)
    {
        Set<String> res = new LinkedHashSet<String>();
    
        for (int i = 0; i < list.size(); i++)
        {
            if (list.get(i).getDay().length() > 0)
                res.add(list.get(i).getDay());
        }
    
        List<String> temp = new ArrayList<String>(res);
        Collections.sort(temp, dateComparator);
        return temp;
    }
    
    Comparator<String> dateComparator = new Comparator<String>()
    {
        @Override
        public int compare(String lhs, String rhs)
        {
            try
            {
                DateFormat format = new SimpleDateFormat("MM-dd-yyyy h:mm:ss a");
                return format.parse(lhs).compareTo(format.parse(rhs));
            }
            catch (Exception e)
            {
                return 0;
            }
        }
    };
    

    【讨论】:

    • 我不太明白你的目的是什么
    • 例如“YourModel”是什么意思?
    • YourModel 是您为日期、描述、名称等实现 getter 和 setter 的类。
    • 示例:public class YourModel { private int id = -1; private String title = ""; private String day = ""; private String description = ""; public int getId() { return id; } public void setId(int id) { this.id = id; } // Other getters and setters }
    • 在你的代码中你有ArrayList&lt;Event&gt; events = new ArrayList&lt;Event&gt;(); // list of all events,然后在 getUniqueDays 方法的帮助下你可以得到像你的问题一样的独特日期列表,即ArrayList&lt;Event&gt; uniqueEvents = getUniqueDays(events); 然后我使用比较器对唯一日期列表进行排序。在我的情况下,我按日期类型对天数进行排序,也许在你的情况下最好使用按长值或其他方式排序。一般来说,排序是不必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多