import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
// one class needs to have a main() method
public class HelloWorld
{
// arguments are passed using the text field below this editor
public static void main(String[] args) throws Exception
{
String str = "Mon 21st May";
DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("EEEE d['st']['nd']['rd']['th'] MMMM", Locale.ENGLISH);
LocalDate datetext = LocalDate.parse(str, parseFormatter);
}
}
public static void main(String[] args) throws Exception
{
String str = "Tue 21st May";
DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("EEE d['st']['nd']['rd']['th'] MMMM", Locale.ENGLISH);
LocalDate datetext = LocalDate.parse(str, parseFormatter);
}
}
错误:
线程“main”java.time.format.dateTimeParseException:无法解析文本“Tue 21 May”:无法从TemporalAccessor获取LocalDate:{DayOfWeek=2,DayOfMonth=21,MonthOfYear=5},类型为java.time.format.dateTimeFormatter.createError(dateTimeFormatter.java:1920)在java.time.format.dateTimeFormatter.jave:1855)在java.time.LocalDate.parse(dateTimeFormatter.java:1855)在java.time.LocalDate.parse(LocalDate.java:400)在EtimeException:无法从TemporalAccessor获取LocalDate:{DayOfWeek=2,DayOfMonth=21,MonthOfYear=5},类型为java.time.LocalDate.from(LocalDate.java:368)的ISO at java.time.LocalDate.from(LocalDate.java:368)at java.time.format.parse.query(parsed.java:226)at java.time.format.dateTimeFormatter.parse(dateTimeFormatter.jave:1851)...
如果要在没有年份的情况下解析月份和日期,请使用monthday
:
String str = "Mon 21st May";
DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("EEE d['st']['nd']['rd']['th'] MMMM", Locale.ENGLISH);
MonthDay md = MonthDay.parse(str, parseFormatter);
System.out.println(md);
输出为:
--05-21
LocalDate datetext = md.atYear(Year.now(ZoneId.of("Europe/London")).getValue());
System.out.println(datetext);
String str = "Tue 21st May";
DateTimeFormatter parseFormatter = new DateTimeFormatterBuilder()
.appendPattern("EEE d['st']['nd']['rd']['th'] MMMM")
.parseDefaulting(ChronoField.YEAR, Year.now(ZoneId.of("Europe/London")).getValue())
.toFormatter(Locale.ENGLISH);
LocalDate datetext = LocalDate.parse(str, parseFormatter);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("EEEE d MMMM", Locale.ENGLISH);
System.out.println(datetext.format(outputFormatter));
5月21日星期二
我可能不知道年份,因为我试图在应用程序中查看日期,但有些日期可能是今年,有些可能是明年,但这些日期没有提供年份
下面的完整示例假设日期在从今天起的未来3年内,并检测星期几正确的年份。一旦成功,它就会以您想要的格式打印出来。
String str = "Wed 20th May";
ZoneId zone = ZoneId.of("Europe/London");
LocalDate today = LocalDate.now(zone);
int currentYear = today.getYear();
LocalDate datetext = null;
final int maxYearsFromToday = 3;
for (int year = currentYear; year <= currentYear + maxYearsFromToday; year++) {
DateTimeFormatter parseFormatter = new DateTimeFormatterBuilder()
.appendPattern("EEE d['st']['nd']['rd']['th'] MMMM")
.parseDefaulting(ChronoField.YEAR, year)
.toFormatter(Locale.ENGLISH);
try {
datetext = LocalDate.parse(str, parseFormatter);
System.out.println("Day of week matched for year " + year);
break;
} catch (DateTimeParseException dtpe) {
// Ignore, try next year
}
}
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("EEEE d MMMM", Locale.ENGLISH);
if (datetext == null) {
System.out.println("Could not parse date;"
+ " possibly the day of week didn’t match for any year in the range "
+ currentYear + " through " + (currentYear + maxYearsFromToday));
} else if (datetext.isBefore(today) || datetext.isAfter(today.plusYears(maxYearsFromToday))) {
System.out.println("Date is out of range");
} else {
System.out.println("Successfully parsed: " + datetext.format(outputFormatter));
}
Day of week matched for year 2020
Successfully parsed: Wednesday 20 May
线程“main”java.time.format.DateTimeParseException中出现异常:无法在索引16处解析文本“14:30 Sat 05 May” 任何帮助都很感激。
使用DateTimeFormatter仅解析LocalTime变量的“Time of Day”时出现问题。尝试了几种不同的格式,但没有看到我缺少了什么(我在想,既然我使用了DateTimeFormatter,我就需要一个date组件,但我只使用了LocalDate就没问题了,而且文档说它支持LocalTime)。 提前感谢任何帮助/链接,以确定我的错误导致异常。 使用此SSCCE复制: ...我得
问题内容: 从DateTimeFormatter javadoc: 区域名称:时区名称(’z’)无法解析。 因此,时区解析如下: 在Joda中无法完成: 问题答案: 我认为原因是“ z”时区名称是常规名称(不是标准化的)且模棱两可;也就是说,根据您的原籍国,它们的含义不同。例如,“ PST”可以是“太平洋标准时间”或“巴基斯坦标准时间”。 如果您有兴趣,此站点上列出了大量时区名称。发现存在歧义的情
问题内容: 我正在尝试使用Java 8 将格式化的字符串解析为对象。但是,我在解析某些输入字符串时遇到了一些问题。当我的输入字符串具有“ AM”时,它将正确解析,但是当我的字符串具有“ PM”时,它将引发异常。这是一个简单的例子: 输出: 因此可以正确解析,但是会在消息中抛出DateTimeParseException: 但是,这就是我遇到的问题。.我不太确定该错误的确切含义,但这绝对与输入字符串
下面是查询
我对Groovy还比较陌生,我正试着去了解Gradle。如果我导入组织。jvnet。哈德逊。通过Grapes插件,它可以完美地工作,并且解决了依赖关系。但是,如果我尝试使用Gradle检索依赖关系,则依赖关系不会得到解决。 包适用于Gradle和Grape。 未使用Gradle解决的依赖关系 使用Grape解决的依赖关系 使用Gradle解决的依赖项 Gradle构建过程中的错误 build.gr