【发布时间】:2020-12-08 16:14:15
【问题描述】:
在使用 SimpleDateFormat 解析时间字符串时,我看到了一些令我感到困惑的输出。因此,鉴于以下情况:
public class NewMain
{
public static void main( String[] args )
{
String str1 = "00:00:03";
parseStr(str1);
String str2 = "-00:00:03";
parseStr(str2);
String str3 = "00:59:59";
parseStr(str3);
String str4 = "-00:59:59";
parseStr(str4);
String str5 = "01:00:00";
parseStr(str5);
String str6 = "-01:00:00";
parseStr(str6);
}
private static void parseStr(String aStr)
{
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Calendar cal = sdf.getCalendar();
Date date = cal.getTime();
System.out.println("SimpleDateFormat.getCalendar.getTime: " + date.toString());
try
{
Date dee = sdf.parse(aStr);
String dStr = dee.toString();
System.out.println("SimpleDateFormat.parse("+aStr+") = " + dStr);
}
catch (ParseException ex)
{
ex.printStackTrace();
}
System.out.println("");
}
}
然后输出:
SimpleDateFormat.getCalendar.getTime: Sun Dec 08 10:00:28 CST 1940
SimpleDateFormat.parse(00:00:03) = Thu Jan 01 00:00:03 CST 1970
SimpleDateFormat.getCalendar.getTime: Sun Dec 08 10:00:28 CST 1940
SimpleDateFormat.parse(-00:00:03) = Thu Jan 01 00:00:03 CST 1970
SimpleDateFormat.getCalendar.getTime: Sun Dec 08 10:00:28 CST 1940
SimpleDateFormat.parse(00:59:59) = Thu Jan 01 00:59:59 CST 1970
SimpleDateFormat.getCalendar.getTime: Sun Dec 08 10:00:28 CST 1940
SimpleDateFormat.parse(-00:59:59) = Thu Jan 01 00:59:59 CST 1970
SimpleDateFormat.getCalendar.getTime: Sun Dec 08 10:00:28 CST 1940
SimpleDateFormat.parse(01:00:00) = Thu Jan 01 01:00:00 CST 1970
SimpleDateFormat.getCalendar.getTime: Sun Dec 08 10:00:28 CST 1940
SimpleDateFormat.parse(-01:00:00) = Wed Dec 31 23:00:00 CST 1969
前 2 个负数解析到没有“-”的给定时间。但是,字符串“-01:00:00”解析到完全不同的时间。看起来解析器从 1970 年 1 月 1 日开始减去它。我对此感到很困惑,因为“-00:00:03”和“-00:59:59”没有那种效果!
任何帮助将不胜感激!
【问题讨论】:
-
SimpleDateFormat用于解析/格式化日期,而不是持续时间或计时器。 -
更准确地说,@SotiriosDelimanolis,10 年前,
SimpleDateFormat是指一天中的日期和时间。今天它已经不打算再使用了,而且它总是出了名的麻烦。我建议我们使用java.time, the modern Java date and time API。
标签: java time simpledateformat java-time datetime-parsing