我尝试使用Javas GregorianCalendar
和SimpleDateFormat
类来创建时间序列。
我使用的原始数据是简单的纪元格式(Unix时间),我将所有这些时间戳翻译成可读的时间和日期。
但是,如果我有一个时间序列,范围从23.00到01.00(即日期在中间某处改变),我希望我的输出反映出来。
示例:
{"23.00", "23.30", "00.00 2015-08-12", "00.30", "01.00"}
您是否知道SimpleDateFormat
中是否有对此的支持,或者我可以做些什么来自动执行此过程?
谢谢!
答案 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();
}
}