【问题标题】:Conditional time formatting Java条件时间格式化Java
【发布时间】:2015-08-12 15:19:16
【问题描述】:

我正在尝试使用 Javas GregorianCalendarSimpleDateFormatclasses 来创建时间序列。

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

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

例子:

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

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

谢谢!

【问题讨论】:

  • SimpleDateFormat (和类似的)一次只适用于一个日期,它应该如何知道这一天已经改变?使用两个SimpleDateFormat,自己控制一天的变化。
  • @Joakim 对任何日期格式化程序的单次调用不知道是否是在午夜之后第一次调用。您必须使用外部代码来表示这一事实。顺便说一句,请注意时区等。
  • 胡安原谅我的英语不太流利

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


【解决方案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();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2015-02-10
    • 2017-11-25
    相关资源
    最近更新 更多