在DateTimeFormatter类文档定义了不同的符号u为一年,y一年的时代:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns
年份和年份有什么区别?
在DateTimeFormatter类文件说,有关当年的格式代码:
你在2004年; 04
y年的2004年; 04
...
年份:字母数决定了使用填充的最小字段宽度.如果字母数是2,则使用减少的两位数形式.对于打印,这将输出最右边的两位数字.对于解析,这将使用2000的基值进行解析,从而产生2000到2099(包括2000和2099)范围内的一年.如果字母数小于4(但不是2),则符号仅按负号年份输出,符合SignStyle.NORMAL.否则,如果超出了焊盘宽度,则根据SignStyle.EXCEEDS_PAD输出符号.
没有提到"时代".
那么究竟是什么这两个代码之间的差异,u对y,year对year-of-era?
什么时候应该使用类似这种模式的东西uuuu-MM-dd以及何时yyyy-MM-dd使用Java中的日期?
似乎那些知道使用的代码编写的示例代码uuuu,但为什么呢?
其他格式化类如遗产SimpleDateFormat只有yyyy,所以我很困惑为什么java.time uuuu为"年代" 带来了这个.
在错误的年份使用DateTimeFormatter(使用下面的模式)LocalDate结果。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
DateTimeFormatter format = DateTimeFormatter.ofPattern("MM-d-YYYY");
LocalDate date = LocalDate.of(2018, 12, 31);
date.format(format); // returns 12-31-2019 (expected 2018)
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?
我的问题似乎非常简单.我从GregorianCalendar对象创建一个日历图形用户界面,并使用它的方法计算不同月份的正确天数,以及不同日期的相应工作日.
但工作日有一天休息一致.日历声称2013年7月1日是'2',这在我的世界意味着星期二.星期一应该是'1'."简单!" 我想,并把它放在一行:c.setFirstDayOfWeek(Calendar.MONDAY); 但没有给出任何反应.
所以我搜索stackoverflow得到一个答案,但是每个有问题的人似乎都忘记了1月是0,而不是1.我没有.所以现在我被卡住了.
作为一个简化的代码,我创建了一个非常短的代码片段,它具有相应的输出:
GregorianCalendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.MONTH, 6);
c.set(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.YEAR, 2013);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
System.out.println(sdf.format(c.getTime()));
System.out.println(c.get(Calendar.DAY_OF_WEEK));
Run Code Online (Sandbox Code Playgroud)
输出是:
2013年1月7日
2
我拒绝在我的代码中输入"-1",错误地纠正了显然是错误的症状.感谢帮助.
Java 8在这里.我有以下代码:
final String createdDateStr = "20110920";
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYYMMdd");
final LocalDate localDate = LocalDate.parse(createdDateStr, formatter);
Run Code Online (Sandbox Code Playgroud)
在运行时,我得到以下异常:
java.time.format.DateTimeParseException: Text '20110920' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.
Run Code Online (Sandbox Code Playgroud)
......被LocalDate.parse(...)调用抛出 解析器出了什么问题?!
我正在运行一些代码,遇到了一个我无法理解的奇怪错误。所以我尝试调试它并运行多个测试,发现这是我正在运行的代码
@Test
public void test(){
LocalDate firstDay = LocalDate.parse("2020-12-01");
LocalDate lastDay = LocalDate.parse("2020-12-31");
String firstDayString = firstDay.format(DateTimeFormatter.ofPattern("YYYYMMdd"));
String lastDayString = lastDay.format(DateTimeFormatter.ofPattern("YYYYMMdd"));
System.out.println(firstDayString);
System.out.println(lastDayString);
}
Run Code Online (Sandbox Code Playgroud)
这是输出
20201201
20211231
Run Code Online (Sandbox Code Playgroud)
请注意,当我尝试执行此格式时,最后日期的年份已更改为 2021 年。有没有其他人注意到这一点?
我正在尝试解析一个字符串以获取Date对象,但它总是返回Sun. 2012年12月30日为日期.有没有人对我做错了什么有任何想法?
我使用YYYY-MM-dd格式的字符串使用相同的代码,它工作得很好,所以我不确定为什么切换到这种格式会导致问题.
public static Date getDateObjFromStr(String dateStr)
{
DateFormat formatter = new SimpleDateFormat("MM/dd/YYYY");
Date dateObj;
try {
dateObj = formatter.parse(dateStr);
return dateObj;
} catch(Exception e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)


这是代码:
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1451438792953L), ZoneId.of("UTC"));
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
String output = dateTimeFormatter.format(localDateTime);
Run Code Online (Sandbox Code Playgroud)
这是值localDateTime:
2015-12-30T01:26:32.953
Run Code Online (Sandbox Code Playgroud)
这是值output:
2016-12-30T01:26:32.953Z
Run Code Online (Sandbox Code Playgroud)
为什么要增加一年?
其中java.time.temporal.WeekFields有几种方法,有时会newYearWeek增加年数1。为什么?
这是一个奇怪的错误。