条件时间格式 Java

Conditional time formatting Java

我正在尝试使用 Javas GregorianCalendarSimpleDateFormat类 创建时间序列。

我使用的原始数据采用简单的纪元格式(Unix 时间),我将所有这些时间戳转换为可读的时间和日期。

但是,如果我有一个从 23.00 到 01.00 的时间序列(即日期在中间某处发生变化),我希望我的输出能够反映这一点。

示例:

{"23.00", "23.30", "00.00 2015-08-12", "00.30", "01.00"}

您知道 SimpleDateFormat 中是否对此有一些支持,或者我可以做些什么来自动化这个过程吗?

谢谢!

这里有一些示例代码可以使用。关键位使用 Calendar class 来跟踪日期的变化。这输出:

{"23.00", "23.30", "00.00 2015-08-12", "00.30", "01.00", "01.30"}

代码:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class TS {

    // 11PM 2015-08-12
    long base=1439348420L; 

    long[] timestamps = {
        base,
        base + 1800,
        base + 1800*2,
        base + 1800*3,
        base + 1800*4,
        base + 1800*5
    };

    // MAKE SURE THIS IS IN THE RIGHT TIMEZONE
    Calendar cal = Calendar.getInstance();
    int lastday;
    static DateFormat HHMM = new SimpleDateFormat("\"HH.mm\"");
    static DateFormat DATE_HHMM = new SimpleDateFormat("\"HH.mm yyyy-MM-dd\"");

    public void run() {
        StringBuilder sb = new StringBuilder("{");
        for (int i=0; i<timestamps.length; i++) {
            if (i>0) sb.append(", ");
            sb.append(formattedDate(timestamps[i]));
        }
        sb.append('}');
        System.out.println(sb.toString());
    }

    public String formattedDate(long unixtime) {
        String result = null;
        cal.setTimeInMillis(unixtime*1000);

        int today = cal.get(Calendar.DAY_OF_MONTH);
        if (today != lastday && lastday > 0) {
            result = DATE_HHMM.format(cal.getTime());
        } else {
            result =  HHMM.format(cal.getTime());
        }
        lastday = today;
        return result;
    }

    public static void main(String[] args) {
        TS ts = new TS();
        ts.run();
    }

}