【问题标题】:How to parse this date format (dd-m-y) in java [duplicate]如何在java中解析这种日期格式(dd-m-y)[重复]
【发布时间】:2018-08-31 14:06:56
【问题描述】:

我在用 Java 中的 SimpleDateFormat 类解析日期格式 dd-m-y 时遇到了一些问题。

那么对于这种日期格式类型(12-oct-14)有没有日期格式器?

【问题讨论】:

  • 计算天数是什么意思?从什么时候到什么?
  • @ClaudiuGuja 我必须计算这种格式的两个日期之间的天数
  • @OleV.V.不,我说的是具体的日期格式
  • 是的——你尝试了什么?你的搜索把你带到哪里?如果您从网上找到的解决方案没有成功,您仍然应该告诉我们您的尝试是如何失败的。当我们看到努力时,我们更愿意提供帮助,当我们了解您在此任务中遇到的具体问题时,我们可以为您提供更好的帮助。
  • @OleV.V.为什么你不赞成我的问题?我只是java的初学者,在搜索了这个主题之后,我在这里寻求帮助以完成我的项目。

标签: java date simpledateformat date-parsing


【解决方案1】:
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy")

如果您使用的是 Java 8 或 9,请参考this

【讨论】:

  • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API 和它的DateTimeFormatter 中做得更好。
  • 仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 和 Java 中内置的 java.time 类所取代9. 见Tutorial by Oracle
  • @BasilBourque 我已经用一个链接更新了我的答案,该链接显示了如何以 Java 8 方式完成。
【解决方案2】:
String format = "dd-MMM-yy";

SimpleDateFormat sdf = new SimpleDateFormat(format);
System.out.println(sdf.format(new Date()));
System.out.println(sdf.parse("12-oct-14"));

结果:

18 年 3 月 22 日
2014 年 10 月 12 日星期日 00:00:00 UTC

【讨论】:

  • 您的回答与 Tino 已经发布的回答有何不同?
  • @Eyildiz 谢谢它的工作
【解决方案3】:

第一步:使用您需要的格式和ofPattern() 方法创建一个DateTimeFormatter

第二步:用.parse(CharSequence text, DateTimeFormatter format)方法创建两个LocalDate对象。

第三步:使用firstDate.untill(secondDate)并接收Period对象。

第四步:使用.getDays()方法从Period对象中获取天数。

【讨论】:

  • 由于字符串不包含时间,这些应该是LocalDate 对象(而不是LocalDateTime)。
  • 谢谢,这是我的错字,现在将编辑
【解决方案4】:

其他答案可能有效,但大多数人经常忘记一些细节。

您输入的月份名称(“oct”)是英语(或其他语言,十月的缩写是“oct”,但我在这里假设是英语,因为这不会改变答案)。

当您创建SimpleDateFormat 时,它使用JVM 默认语言环境(由类java.util.Locale 表示)。在您的情况下,new SimpleDateFormat("dd-MMM-yy") 有效,因为您的 JVM 的默认语言环境可能已经是英语。

但默认语言环境可以更改,即使在运行时,甚至可以由在同一 JVM 中运行的其他应用程序更改。换句话说,您无法控制它,也无法保证默认始终为英语。

在这种情况下,如果您知道输入始终是英文,那么在格式化程序中明确使用java.util.Locale 会更安全、更好:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy", Locale.ENGLISH);

更好的是使用 - 如果您可以使用 - Java 8's date/time API。这个API比SimpleDateFormat好很多,因为it solves many of the problems this class has

代码一开始可能看起来更难,但学习新的 API 完全值得:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
    // case insensitive, for month name
    .parseCaseInsensitive()
    // pattern for day-month-year
    .appendPattern("dd-MMM-yy")
    // use English for month name
    .toFormatter(Locale.ENGLISH);
System.out.println(LocalDate.parse("12-oct-14", fmt));

【讨论】:

  • 是的,一定避免使用SimpleDateFormat,而是使用java.time类。见Oracle Tutorial
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2018-03-07
  • 2018-05-25
  • 1970-01-01
  • 2012-07-21
相关资源
最近更新 更多