可以删除对ofLocalizedDateTime()的调用,因为最后你调用ofPattern(),创建另一个格式不同的格式化程序(由ofLocalizedDateTime(FormatStyle.FULL)返回的模式与月份非常不同,所以这是不是你真正想要的).

另一个细节是Mayo是完整的月份名称,因此模式必须是MMMM(check the javadoc以获取更多详细信息).此外,默认情况下,DateTimeFormatter仅接受小写名称(至少在我使用西班牙语语言环境进行的测试中),因此您必须将格式化程序设置为不区分大小写.

您可以使用java.time.format.DateTimeFormatterBuilder来实现:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()

// case insensitive

.parseCaseInsensitive()

// pattern with full month name (MMMM)

.appendPattern("MMMM yyyy")

// set locale

.toFormatter(new Locale("es", "ES"));

// now it works

fmt.parse("Mayo 2017");

或者,您可以直接将其解析为java.time.YearMonth对象,因为它似乎是这种情况的最佳选择(因为输入只有年和月):

YearMonth ym = YearMonth.parse("Mayo 2017", fmt);

System.out.println(ym); // 2017-05

默认值

当输入没有所有字段时,SimpleDateFormat只是为它们使用一些默认值.在这种情况下,输入只有年和月,因此解析的日期将等于解析的月/年,但是日期将设置为1,时间将设置为午夜(在JVM默认时区).

新API对此非常严格,除非您告诉它,否则不会创建默认值.配置它的一种方法是使用parseDefaulting和java.time.temporal.ChronoField:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()

// case insensitive

.parseCaseInsensitive()

// pattern with full month name (MMMM)

.appendPattern("MMMM yyyy")

// default value for day of month

.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)

// default value for hour

.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)

// default value for minute

.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)

// set locale

.toFormatter(new Locale("es", "ES"));

这样,您可以将其解析为LocalDateTime,并将缺少的字段分配给相应的默认值:

LocalDateTime dt = LocalDateTime.parse("Mayo 2017", fmt);

System.out.println(dt); // 2017-05-01T00:00

如果需要获取与SimpleDateFormat创建的值相同的java.util.Date,可以将此LocalDateTime转换为JVM默认时区,然后将其转换为Date:

Date javaUtilDate = Date.from(dt.atZone(ZoneId.systemDefault()).toInstant());

请注意,我必须明确使用JVM默认时区(ZoneId.systemDefault()),这是SimpleDateFormat所使用的.

另一种方法是手动设置YearMonth值中的值:

// in this case, the formatter doesn't need the default values

YearMonth ym = YearMonth.parse("Mayo 2017", fmt);

ZonedDateTime z = ym

// set day of month to 1

.atDay(1)

// midnight at JVM default timezone

.atStartOfDay(ZoneId.systemDefault());

Date javaUtilDate = date.from(z.toInstant());

API使用IANA timezones names(总是采用Region / City格式,如America / New_York或Europe / Berlin),因此您可以调用ZoneId.of(“America / New_York”).

避免使用3个字母的缩写(如CST或PST),因为它们是ambiguous and not standard.

您可以通过调用ZoneId.getAvailableZoneIds()获取可用时区列表(并选择最适合您系统的时区).

java西语_使用Java 8 DateTimeFormatter和西班牙语月份名称进行解析相关推荐

  1. c语言和java哪个好学_学java前要学C语言吗?java和C语言哪个好学?

    在编程世界,只要一提到java,总会有人联想到C语言,仿佛这两者之间有着一种密不可分的联系,那么也会有外行人在选择学习编程时,会有类似于学java前是否需要学习C语言呢?或者说java和C语言哪个会比 ...

  2. java 删除语句_是java语句

    <21天学通Java(第7版)>-- 第2章 Java编程基础 2.1 语句和表达式 本节书摘来异步社区<21天学通Java(第7版)>一书中的第2章,第2.1节,作者: [美 ...

  3. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  4. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道

    字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...

  5. java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)

    import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...

  6. java动态类加载_实现Java动态类载入机制

    作 为 充 分 利 用Java 的 动 态 类 载 入 机 制 的 最 好 例 子, 带 有Java 扩 展 的Web 浏 览 器 根 据 请 求 从 网 络 或 本 地 文 件 系 统 中 动 态 ...

  7. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  8. java 包命名_【Java】包的命名规则

    命名规范 包:所有单词的字母小写,之后每个单词用-隔开,如 org.nemo.demo 常量:所有单词的字母大写,之后每个单词用_隔开,如 FLAG 类:所有单词的首字母大写,如 TestJava p ...

  9. java 图片效果_使用Java进行图片底片化效果处理

    使用java代码读取图片,并进行底片化处理 util importjava.awt.image.BufferedImage;importjava.io.File;importjava.util.Arr ...

最新文章

  1. 设置SharePoint部门站点各个文件夹的权限
  2. 开启iOS自动化测试之门
  3. boost::serialization模块指针反序列化的安全异常处理示例
  4. 音乐、视频播放模式切换实现方案及原理解析(基于vue、vuex、h5 audio)
  5. Matlab各种最值问题
  6. Vue框架之条件与循环的使用
  7. 保险营销观察报告:保险直播“带货”的现状、风险分析与未来研判
  8. 智能门禁(3)---汉王智能人脸门禁系统
  9. exchange实现外部邮件收发的两种方法
  10. PLC状态机编程第六篇-优化PLC程序生成
  11. 【Qt学习笔记】4.事件处理
  12. Linux c学习--进程基础学习
  13. Learning to Track at 100 FPS with Deep Regression Networks 论文笔记
  14. Java修改Windows注册表
  15. 怎么使用山东鼎信发送短信验证码
  16. 驼色的羊绒大衣怎么搭配好看
  17. HDU4417_树状数组加离线
  18. Android之ContextMenu的使用方法以及与OptionMenu的区别
  19. 移动通信电磁辐射(转)
  20. 51nod 2075 图书管理员

热门文章

  1. 彼岸花开开彼岸,奈何桥前怎奈何
  2. UE4移动平台AR开发快速预览
  3. Python的数据科学函数包(二)——pandas(series dataframe)(loc iloc ix)(csv文件)
  4. 百度新闻推荐真的在推荐新闻吗
  5. JES-java emil server搭建
  6. halcon初识region
  7. 小猫爪:汽车电子小知识01- ISO15765(UDS on CAN)详解
  8. zData与持续优化 云和恩墨以创新获天安人寿供应商突出贡献奖
  9. PAT-1014 福尔摩斯的约会
  10. 【JZOJ 100029】【NOIP2017提高A组模拟7.8】陪审团 (贪心+排序)