我试图解析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
答案 0 :(得分:3)
YY
应为yy
(小写)。您可以在documentation。
出于好奇,有关YY
的更多信息,这是周年,here(不是100%确定诚实是什么)。
答案 1 :(得分:1)
我正在使用现代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
我建议您不要使用SimpleDateFormat
和Date
。这些类的设计很差,而且已经过时了,特别是前者非常麻烦。而是使用来自现代Java日期和时间API java.time的LocalDateTime
和DateTimeFormatter
。现代的API更好用。如果您尝试使用YY
一年,并且BTW会抛出异常,我发现它在捕获错误方面会有所帮助。
格式模式字符串中逗号的引号是可选的。我知道文档会推荐它们,但是如果没有它们,我会发现格式模式字符串更易读,因此请忽略它们。
格式模式字符串中的大写字母Y
是基于星期的年份,仅对星期编号有用。 SimpleDateFormat
显然无法将您指定的月份和某月中的某几天与2011年基于周的年份相结合,而只是采用了基于周的年份的第一天(这是SimpleDateFormat
的典型行为,给您带来的结果肯定是错误的,并且假装一切都很好)。假设您的语言环境是美国或类似地区,则第1周是包含1月1日并从同一周的星期日开始的一周,因此,在这种情况下,则是上一年的最后一个星期日,即2010年12月26日。
在java.time中,年份可以使用小写的y
或u
。细微的差异在底部的链接问题中得到了解释。在任何情况下,从2000年到2099年的范围都可以解释为两位数的年份(如果需要,可以使用一些方法来控制解释)。