我正在尝试将日期打印为:2013/11/20 08 30但是通过simpledateformat解析日期之后打印如下:Wed Nov 20 14:00:00 IST 2013, 在这里我通过了HH和MM作为08 30,但解析后它改为14:00:00
你能否建议
public class PrintDate {
public static void main(String[] args) {
System.out.println(getDate("2013/11/20","08","30"));
}
public static Date getDate(String date, String hour, String miniute) {
final SimpleDateFormat displayDateTimeFormat = new SimpleDateFormat("yyyy/MM/dd HH mm");
displayDateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String paddedHour = hour.length() == 2 ? hour : "0" + hour;
int min = Integer.valueOf(miniute);
int remainder = min % 5;
int roundMinute = remainder > 2 ? min - remainder + 5 : min - remainder;
String minuteStr = String.valueOf(roundMinute);
String paddedMinuteStr = minuteStr.length() == 2 ? minuteStr : "0" + minuteStr;
String startDateStr = date + " " + paddedHour.toUpperCase() + " " + paddedMinuteStr;
Date startDate = null;
try {
startDate = displayDateTimeFormat.parse(startDateStr);
} catch (ParseException e) {
}
return startDate;
}
}
答案 0 :(得分:2)
在解析日期之后通过simpledateformat Wed Nov 20 14:00:00 IST 2013,在这里我通过了HH和MM作为08 30但是在解析后它改为14:00:00
是的,因为您指定希望将其解析为UTC值。但是,Date
本身没有时区概念 - 它只是一个瞬间。 Date.toString()
将始终使用默认时区。
2013-11-20 08:30 UTC与2013-11-20 14:00 IST的时间相同,所以它实际上正确解析它 - 这只是Date.toString()
的结果让你感到困惑
如果您还要保留时区,则必须单独执行此操作 - 或者(更好)使用Joda Time这是一个更好的日期/时间API,并且{{3} } class,表示特定日历系统和时区中的即时时间。
答案 1 :(得分:1)
只需尝试下面的代码行,即可在所需的format -
中获取日期Date date=new Date(2013-1900,10,20,8,30);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyy/MM/dd K mm");
String strFormatDate = dateFormat.format(date);
Date dtFormatDate = dateFormat.parse(strFormatDate);
System.out.println("Formatted date in String:"+strFormatDate);
System.out.println("Formatted Date:"+dtFormatDate);
只需在日期格式中提供 K 而不是HH。您可以将日期设置为14 30,然后此格式也会根据需要转换日期。
由于