条件时间格式化Java

时间:2015-08-12 15:19:16

标签: java datetime simpledateformat datetime-format gregorian-calendar

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

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

但是,如果我有一个时间序列,范围从23.00到01.00(即日期在中间某处改变),我希望我的输出反映出来。

示例:

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

您是否知道SimpleDateFormat中是否有对此的支持,或者我可以做些什么来自动执行此过程?

谢谢!

1 个答案:

答案 0 :(得分:1)

以下是一些可供使用的示例代码。关键位使用Calendar类来跟踪日期的变化。这输出:

{"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();
    }

}