栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在java中如何将一个字符串转换为日期?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在java中如何将一个字符串转换为日期?

在特定情况下,“ 2010年1月2日”作为输入字符串:

  1. “一月”是全文月份,因此请使用
    MMMM
    模式
  2. “ 2”是较短的月份,因此请使用
    d
    模式。
  3. “ 2010”是4位数字的年份,因此请使用
    yyyy
    模式。
String string = "January 2, 2010";DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);Date date = format.parse(string);System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010

注意显式Locale参数的重要性。如果您省略它,那么它将使用默认语言环境,该语言环境不一定是输入字符串的月份名称中使用的英语。如果语言环境与输入字符串不匹配,那么java.text.ParseException即使格式模式似乎有效,您也可能会混淆。

以下是javadoc的相关摘录,列出了所有可用的格式模式:

Letter  Date or Time Component  Presentation        Examples------  ----------------------  ------------------  -------------------------------------G       Era designator          Text     ADy       Year         Year     1996; 96Y       Week year    Year     2009; 09M/L     Month in yearMonth    July; Jul; 07w       Week in year Number   27W       Week in monthNumber   2D       Day in year  Number   189d       Day in month Number   10F       Day of week in month    Number   2E       Day in week  Text     Tuesday; Tueu       Day number of week      Number   1a       Am/pm marker Text     PMH       Hour in day (0-23)      Number   0k       Hour in day (1-24)      Number   24K       Hour in am/pm (0-11)    Number   0h       Hour in am/pm (1-12)    Number   12m       Minute in hour          Number   30s       Second in minute        Number   55S       Millisecond  Number   978z       Time zone    General time zone   Pacific Standard Time; PST; GMT-08:00Z       Time zone    RFC 822 time zone   -0800X       Time zone    ISO 8601 time zone  -08; -0800; -08:00

请注意,这些模式区分大小写,并且四个或更多字符的基于文本的模式代表完整形式;否则,请使用简短形式或缩写形式。因此,例如

MMMMM
不需要更多。

以下是一些有效

SimpleDateFormat
模式的示例,这些模式可以解析迄今为止的给定字符串:

Input string      Pattern------------------------------------    ----------------------------2001.07.04 AD at 12:08:56 PDTyyyy.MM.dd G 'at' HH:mm:ss zWed, Jul 4, '01   EEE, MMM d, ''yy12:08 PM          h:mm a12 o'clock PM, Pacific Daylight Time    hh 'o''clock' a, zzzz0:08 PM, PDT      K:mm a, z02001.July.04 AD 12:08 PM    yyyyy.MMMM.dd GGG hh:mm aaaWed, 4 Jul 2001 12:08:56 -0700          EEE, d MMM yyyy HH:mm:ss Z010704120856-0700 yyMMddHHmmssZ2001-07-04T12:08:56.235-0700 yyyy-MM-dd'T'HH:mm:ss.SSSZ2001-07-04T12:08:56.235-07:00yyyy-MM-dd'T'HH:mm:ss.SSSXXX2001-W27-3        YYYY-'W'ww-u

一个重要的注意的是,SimpleDateFormat是不是线程安全的。换句话说,您永远不应声明并将其分配为静态或实例变量,然后从不同的方法/线程重复使用它。您应该始终在方法本地范围内全新创建它。

Java 8更新

如果您恰巧是使用Java 8或更高版本的Java DateTimeFormatter,请使用(也在此处,单击链接以查看所有预定义的格式器和可用的格式模式;该教程可在此处获得)。这个新的API受到JodaTime的启发。

String string = "January 2, 2010";DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);LocalDate date = LocalDate.parse(string, formatter);System.out.println(date); // 2010-01-02

注意:如果您的格式模式也恰好包含时间部分,请使用

[LocalDateTime#parse(text, formatter)](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html#parse-java.lang.CharSequence-java.time.format.DateTimeFormatter-)
代替
[LocalDate#parse(text, formatter)](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#parse-java.lang.CharSequence-java.time.format.DateTimeFormatter-)
。并且,如果您的格式模式也恰好包含时区,请
[ZonedDateTime#parse(text, formatter)](https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#parse-java.lang.CharSequence-java.time.format.DateTimeFormatter-)
改用。

以下是javadoc的相关摘录,列出了所有可用的格式模式:

Symbol  Meaning          Presentation  Examples------  --------------------------  ------------  ----------------------------------------------G       era   text          AD; Anno Domini; Au       year  year          2004; 04y       year-of-era      year          2004; 04D       day-of-year      number        189M/L     month-of-year    number/text   7; 07; Jul; July; Jd       day-of-month     number        10Q/q     quarter-of-year  number/text   3; 03; Q3; 3rd quarterY       week-based-year  year          1996; 96w       week-of-week-based-year     number        27W       week-of-month    number        4E       day-of-week      text          Tue; Tuesday; Te/c     localized day-of-week       number/text   2; 02; Tue; Tuesday; TF       week-of-month    number        3a       am-pm-of-day     text          PMh       clock-hour-of-am-pm (1-12)  number        12K       hour-of-am-pm (0-11)        number        0k       clock-hour-of-am-pm (1-24)  number        0H       hour-of-day (0-23)          number        0m       minute-of-hour   number        30s       second-of-minute number        55S       fraction-of-second          fraction      978A       milli-of-day     number        1234n       nano-of-second   number        987654321N       nano-of-day      number        1234000000V       time-zone ID     zone-id       America/Los_Angeles; Z; -08:30z       time-zone name   zone-name     Pacific Standard Time; PSTO       localized zone-offset       offset-O      GMT+8; GMT+08:00; UTC-08:00;X       zone-offset 'Z' for zero    offset-X      Z; -08; -0830; -08:30; -083015; -08:30:15;x       zone-offset      offset-x      +0000; -08; -0830; -08:30; -083015; -08:30:15;Z       zone-offset      offset-Z      +0000; -0800; -08:00;

请注意,它具有一些用于更流行模式的预定义格式器。因此

DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH)
;,可以代替使用
DateTimeFormatter.RFC_1123_DATE_TIME
。这是可能的,因为
与SimpleDateFormat
线程安全相反,它们是线程安全的。因此,如果需要,您也可以定义自己的名称。

对于特定的输入字符串格式,您不需要使用显式的

DateTimeFormatter
:标准ISO 8601日期(例如2016-09-26T17:44:57Z)可以直接解析,
LocalDateTime#parse(text)
因为它已经使用了ISO_LOCAL_DATE_TIME格式化程序。同样,
[LocalDate#parse(text)](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html#parse-java.lang.CharSequence-)
解析不包含时间成分的ISO日期(请参阅
[ISO_LOCAL_DATE](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_LOCAL_DATE)
),并
[ZonedDateTime#parse(text)](https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#parse-java.lang.CharSequence-)
解析添加了偏移量和时区的ISO日期(请参阅
[ISO_ZONED_DATE_TIME](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_ZONED_DATE_TIME)
)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/364840.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号