java解析字符串到目前为止

时间:2013-01-27 11:08:58

标签: java parsing date format

我试图解析2011年3月14日到Java的日期转换器应用程序...我将于2010年12月26日获得...请帮忙。

import java.util.*;
import java.text.*;

class date {
    public static void main(String[] args) {
      try {
        String timestampOrig = "11/03/14,15:00:00";
        SimpleDateFormat inFormat = new SimpleDateFormat("YY/MM/dd','HH:mm:ss");
        Date parseDate = inFormat.parse(timestampOrig);
        System.out.println("parsed date: " + parseDate.toString());
      }
      catch(ParseException pe){
      }
    }
}

输出:

  

解析日期:美国东部时间2010年12月26日15:00:00

2 个答案:

答案 0 :(得分:3)

YY应为yy(小写)。您可以在documentation

中找到可用字符列表及其含义

出于好奇,有关YY的更多信息,这是周年here(不是100%确定诚实是什么)。

答案 1 :(得分:1)

java.time

我正在使用现代Java日期和时间API(自2014年3月开始)java.time提供现代答案。

    DateTimeFormatter inFormat = DateTimeFormatter.ofPattern("uu/MM/dd,HH:mm:ss");
    String timestampOrig = "11/03/14,15:00:00";
    LocalDateTime parsedDateTime = LocalDateTime.parse(timestampOrig, inFormat);
    System.out.println("parsed date: " + parsedDateTime.toString());

输出为:

  

解析日期:2011-03-14T15:00

我建议您不要使用SimpleDateFormatDate。这些类的设计很差,而且已经过时了,特别是前者非常麻烦。而是使用来自现代Java日期和时间API java.time的LocalDateTimeDateTimeFormatter。现代的API更好用。如果您尝试使用YY一年,并且BTW会抛出异常,我发现它在捕获错误方面会有所帮助。

格式模式字符串中逗号的引号是可选的。我知道文档会推荐它们,但是如果没有它们,我会发现格式模式字符串更易读,因此请忽略它们。

您的代码出了什么问题?

格式模式字符串中的大写字母Y是基于星期的年份,仅对星期编号有用。 SimpleDateFormat显然无法将您指定的月份和某月中的某几天与2011年基于周的年份相结合,而只是采用了基于周的年份的第一天(这是SimpleDateFormat的典型行为,给您带来的结果肯定是错误的,并且假装一切都很好)。假设您的语言环境是美国或类似地区,则第1周是包含1月1日并从同一周的星期日开始的一周,因此,在这种情况下,则是上一年的最后一个星期日,即2010年12月26日。

在java.time中,年份可以使用小写的yu。细微的差异在底部的链接问题中得到了解释。在任何情况下,从2000年到2099年的范围都可以解释为两位数的年份(如果需要,可以使用一些方法来控制解释)。

链接