簡體   English   中英

條件時間格式化Java

[英]Conditional time formatting Java

我正在嘗試使用Java的GregorianCalendarSimpleDateFormat類創建時間序列。

我使用的原始數據采用簡單的紀元格式(Unix時間),我將所有這些時間戳轉換為可讀的時間和日期。

但是,如果我有一個從23.00到01.00的時間序列(即日期在中間某處更改),則希望我的輸出反映出來。

例:

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

您是否知道SimpleDateFormat對此有某種支持,或者我可以做些什么來實現此過程的自動化?

謝謝!

這是一些示例代碼。 關鍵部分使用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();
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM