条件时间格式 Java
Conditional time formatting Java
我正在尝试使用 Javas GregorianCalendar
和 SimpleDateFormat
类 创建时间序列。
我使用的原始数据采用简单的纪元格式(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();
}
}
我正在尝试使用 Javas GregorianCalendar
和 SimpleDateFormat
类 创建时间序列。
我使用的原始数据采用简单的纪元格式(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();
}
}