我正在使用适配器填充带有'ArrayList'的'ListView'。 'ArrayList'包含具有日期和时间的对象。 当我将数据原样发送到ListView时,没有问题,列表会根据需要显示相关对象:
public View getView(int position, View convertView, ViewGroup parent) {
TimePeriod freeSlot = (TimePeriod)getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item, parent, false);
}
TextView start = (TextView) convertView.findViewById(R.id.start);
TextView end = (TextView) convertView.findViewById(R.id.end);
startTime = freeSlot.getStart().toString()
endTime = freeSlot.getEnd().toString();
start.setText(startTime);
end.setText(endTime);
return convertView;
}
2017-07-05T10:30:00.000Z 2017-07-05T11:30:00.000Z
但是当我使用SimpleDateFormat根据需要更改输出时,它会以某种方式将所有对象的日期设置为相同的日期(01/01):
startTime = freeSlot.getStart().toString();
endTime = freeSlot.getEnd().toString();
try {
SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd'T'hh:mm:ss.SSS'Z'");
Date newDate = formatter.parse(startTime);
Date newDate2 = formatter.parse(endTime);
SimpleDateFormat format = new SimpleDateFormat("dd/MM hh:mm");
startTime = format.format(newDate);
SimpleDateFormat format1 = new SimpleDateFormat("hh:mm");
endTime = format1.format(newDate2);
} catch (ParseException pe) {
pe.printStackTrace();
}
start.setText(startTime);
end.setText(endTime);
开始 - 01/01 10:30,结束 - 11:30
正如之前提到的,即使日期和时间,所有对象都会得到这个日期。时间不同。
有什么想法吗?我究竟做错了什么? 非常感谢!
答案 0 :(得分:0)
使用这样的东西来轻松实现 使用以下方法创建一个util类:
/**
* Parses @date to String in provided @format
*
* @param date Date
* @param format Convert to Format
* @return formatted date string
*/
public static String DateToString(Date date, String format) {
if (date != null) {
try {
DateFormat dateFormat = new SimpleDateFormat(format);
return dateFormat.format(date);
} catch (Exception e) {
e.printStackTrace();
return "";
}
} else {
return "";
}
}
/**
* Parses date to String in provided format
*
* @param date Date
* @param format Convert to Format
* @return formatted date string
*/
public static String DateToString(Date date, Format format) {
if (date != null) {
try {
DateFormat dateFormat = new SimpleDateFormat(format.format);
return dateFormat.format(date);
} catch (Exception e) {
e.printStackTrace();
return "";
}
} else {
return "";
}
}
为可重用性创建静态枚举/字符串格式。如下:
public static enum Format {
/**
* "EEE, MMM dd, yyyy, hh:mm a"
*/
FORMAT1("EEE, MMM dd, yyyy, hh:mm a"),
/**
* "dd/MM/yyyy"
*/
FORMAT2("dd/MM/yyyy"),
/**
* "dd/MM/yyyy hh:mm a"
*/
FORMAT3("dd/MM/yyyy hh:mm a"),
/**
* "dd/MM/yyyy hh:mm:ss a"
*/
FORMAT4("dd/MM/yyyy hh:mm:ss a"),
/**
* "dd/MM/yyyy HH:mm"
*/
FORMAT5("dd/MM/yyyy HH:mm"),
/**
* "dd/MM/yyyy HH:mm:ss"
*/
FORMAT6("dd/MM/yyyy HH:mm:ss"),
/**
* "dd-MM-yyyy"
*/
FORMAT7("dd-MM-yyyy"),
/**
* "dd-MM-yyyy hh:mm a"
*/
FORMAT8("dd-MM-yyyy hh:mm a"),
/**
* "dd-MM-yyyy hh:mm:ss a"
*/
FORMAT9("dd-MM-yyyy hh:mm:ss a"),
/**
* "dd-MM-yyyy HH:mm"
*/
FORMAT10("dd-MM-yyyy HH:mm"),
/**
* "dd-MM-yyyy HH:mm:ss"
*/
FORMAT11("dd-MM-yyyy HH:mm:ss"),
/**
* "MM/dd/yyyy"
*/
FORMAT12("MM/dd/yyyy"),
/**
* "MM/dd/yyyy hh:mm a"
*/
FORMAT13("MM/dd/yyyy hh:mm a"),
/**
* "MM/dd/yyyy hh:mm:ss a"
*/
FORMAT14("MM/dd/yyyy hh:mm:ss a"),
/**
* "MM/dd/yyyy HH:mm"
*/
FORMAT15("MM/dd/yyyy HH:mm"),
/**
* "MM/dd/yyyy HH:mm:ss"
*/
FORMAT16("MM/dd/yyyy HH:mm:ss"),
/**
* "MM-dd-yyyy"
*/
FORMAT17("MM-dd-yyyy"),
/**
* "MM-dd-yyyy hh:mm a"
*/
FORMAT18("MM-dd-yyyy hh:mm a"),
/**
* "MM-dd-yyyy hh:mm:ss a"
*/
FORMAT19("MM-dd-yyyy hh:mm:ss a"),
/**
* "MM-dd-yyyy HH:mm"
*/
FORMAT20("MM-dd-yyyy HH:mm"),
/**
* "MM-dd-yyyy HH:mm:ss"
*/
FORMAT21("MM-dd-yyyy HH:mm:ss"),
/**
* "yyyy/MM/dd"
*/
FORMAT22("yyyy/MM/dd"),
/**
* "yyyy/MM/dd hh:mm a"
*/
FORMAT23("yyyy/MM/dd hh:mm a"),
/**
* "yyyy/MM/dd hh:mm:ss a"
*/
FORMAT24("yyyy/MM/dd hh:mm:ss a"),
/**
* "yyyy/MM/dd HH:mm"
*/
FORMAT25("yyyy/MM/dd HH:mm"),
/**
* "yyyy/MM/dd HH:mm:ss"
*/
FORMAT26("yyyy/MM/dd HH:mm:ss"),
/**
* "yyyy-MM-dd"
*/
FORMAT27("yyyy-MM-dd"),
/**
* "yyyy-MM-dd hh:mm a"
*/
FORMAT28("yyyy-MM-dd hh:mm a"),
/**
* "yyyy-MM-dd hh:mm:ss a"
*/
FORMAT29("yyyy-MM-dd hh:mm:ss a"),
/**
* "yyyy-MM-dd HH:mm"
*/
FORMAT30("yyyy-MM-dd HH:mm"),
/**
* "yyyy-MM-dd HH:mm:ss"
*/
FORMAT31("yyyy-MM-dd HH:mm:ss");
private String format;
private Format(String format) {
this.format = format;
}
@Override
public String toString() {
return format;
}
}
答案 1 :(得分:0)
SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd'T'hh:mm:ss.SSS'Z'");
将其更改为:
SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
你需要
您需要使用HH:mm或hh:mm a这是24到12小时格式之间的差异。
答案 2 :(得分:0)
参见java.text.SimpleDateFormat API,模式字母y:对于解析,如果模式字母的数量大于2,则无论数字位数如何,都将按字面解释年份。