LocalDate/LocalDateTime与String的互相转换示例(附DateTimeFormatter详解)

本文阅读时间5分钟。本文由作者三汪首发于简书。


看到网上好像关于Java8提供的新时间包java.time的示例几乎都是关于新类和Date,Calendar这些类的互相转换。
很诧异没有看到与String的互相转换。
那就让我来提供一个示例吧。

转换示例

LocalDate转String

代码

    @Test
    public void LocalDate转String() {        
        LocalDate date = LocalDate.now();
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String dateStr = date.format(fmt);
        System.out.println("LocalDate转String:"+dateStr);
    }

控制台输出结果

LocalDate转String:2017-11-21

LocalDateTime转String

代码

    @Test
    public void LocalDateTime转String() {        
        LocalDateTime dateTime = LocalDateTime.now();
        
        //使用预定义实例来转换
        DateTimeFormatter fmt = DateTimeFormatter.ISO_LOCAL_DATE;
        String dateStr = dateTime.format(fmt);
        System.out.println("LocalDateTime转String[预定义]:"+dateStr);
        
        //使用pattern来转换      
        //12小时制与24小时制输出由hh的大小写决定
        DateTimeFormatter fmt12 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss:SSS");
        String dateStr12 = dateTime.format(fmt12);
        System.out.println("LocalDateTime转String[pattern](12小时制):"+dateStr12);
        
        DateTimeFormatter fmt24 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS");       
        String dateStr24 = dateTime.format(fmt24);      
        System.out.println("LocalDateTime转String[pattern](24小时制):"+dateStr24);
        
        //如果想要给12小时制时间加上am/pm,这样子做:
        fmt12 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss:SSS a");
        dateStr12 = dateTime.format(fmt12);
        System.out.println("LocalDateTime转String[pattern](12小时制带am/pm):"+dateStr12);
    }

控制台输出结果

LocalDateTime转String[预定义]:2017-11-21
LocalDateTime转String[pattern](12小时制):2017-11-21 02:51:51:550
LocalDateTime转String[pattern](24小时制):2017-11-21 14:51:51:550
LocalDateTime转String[pattern](12小时制带am/pm):2017-11-21 02:51:51:550 下午

String转LocalDate和LocalDateTime

代码

    @Test
    public void String转LocalDate和LocalDateTime(){
        String str = "2017-11-21 14:41:06:612";
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS");     
        LocalDate date = LocalDate.parse(str, fmt);
        LocalDateTime time = LocalDateTime.parse(str, fmt);
        System.out.println("date:"+date);
        System.out.println("time:"+time);
    }

控制台输出结果

date:2017-11-21
time:2017-11-21T14:41:06.612

DateTimeFormatter详解

DateTimeFormatter我们更多的是直接使用pattern来做转换,
其实这个类本身已经提供了一些预定义好的实例供我们使用。
下面把两者的具体释义和示例都贴出来供大家参考。

预定义

Predefined Formatters                       Formatter Description                                               Example 
----------------------                      ----------------------                                              ------------ 
ofLocalizedDate(dateStyle)                  Formatter with date style from the locale                           '2011-12-03' 
ofLocalizedTime(timeStyle)                  Formatter with time style from the locale                           '10:15:30' 
ofLocalizedDateTime(dateTimeStyle)          Formatter with a style for date and time from the locale            '3 Jun 2008 11:05:30' 
ofLocalizedDateTime(dateStyle,timeStyle)    Formatter with date and time styles from the locale                 '3 Jun 2008 11:05' 
BASIC_ISO_DATE                              Basic ISO date                                                      '20111203' 
ISO_LOCAL_DATE                              ISO Local Date                                                      '2011-12-03' 
ISO_OFFSET_DATE                             ISO Date with offset                                                '2011-12-03+01:00' 
ISO_DATE                                    ISO Date with or without offset                                     '2011-12-03+01:00'; '2011-12-03' 
ISO_LOCAL_TIME                              Time without offset                                                 '10:15:30' 
ISO_OFFSET_TIME                             Time with offset                                                    '10:15:30+01:00' 
ISO_TIME                                    Time with or without offset                                         '10:15:30+01:00'; '10:15:30' 
ISO_LOCAL_DATE_TIME                         ISO Local Date and Time                                             '2011-12-03T10:15:30' 
ISO_OFFSET_DATE_TIME                        Date Time with Offset                                               '2011-12-03T10:15:30+01:00' 
ISO_ZONED_DATE_TIME                         Zoned Date Time                                                     '2011-12-03T10:15:30+01:00[Europe/Paris]' 
ISO_DATE_TIME                               Date and time with ZoneId                                           '2011-12-03T10:15:30+01:00[Europe/Paris]' 
ISO_ORDINAL_DATE                            Year and day of year                                                '2012-337' 
ISO_WEEK_DATE                               Year and Week                                                       '2012-W48-6' 
ISO_INSTANT                                 Date and Time of an Instant                                         '2011-12-03T10:15:30Z'  
RFC_1123_DATE_TIME                          RFC 1123 / RFC 822                                                  'Tue, 3 Jun 2008 11:05:30 GMT' 

Pattern

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. The following pattern letters are defined: 

  Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   G       era                         text              AD; Anno Domini; A
   u       year                        year              2004; 04
   y       year-of-era                 year              2004; 04
   D       day-of-year                 number            189
   M/L     month-of-year               number/text       7; 07; Jul; July; J
   d       day-of-month                number            10

   Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
   Y       week-based-year             year              1996; 96
   w       week-of-week-based-year     number            27
   W       week-of-month               number            4
   E       day-of-week                 text              Tue; Tuesday; T
   e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
   F       week-of-month               number            3

   a       am-pm-of-day                text              PM
   h       clock-hour-of-am-pm (1-12)  number            12
   K       hour-of-am-pm (0-11)        number            0
   k       clock-hour-of-am-pm (1-24)  number            0

   H       hour-of-day (0-23)          number            0
   m       minute-of-hour              number            30
   s       second-of-minute            number            55
   S       fraction-of-second          fraction          978
   A       milli-of-day                number            1234
   n       nano-of-second              number            987654321
   N       nano-of-day                 number            1234000000

   V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
   z       time-zone name              zone-name         Pacific Standard Time; PST
   O       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;

   p       pad next                    pad modifier      1

   '       escape for text             delimiter
   ''      single quote                literal           '
   [       optional section start
   ]       optional section end
   #       reserved for future use
   {       reserved for future use
   }       reserved for future use
 

前面LocalDateTime转String的部分其实已经涉及到了一些DateTimeFormatter的不同使用方法,这里就不再重复提供demo啦。

扩展阅读


以上。
希望我的文章对你能有所帮助。
我不能保证文中所有说法的百分百正确,但我能保证它们都是我的理解和感悟以及拒绝复制黏贴。
有什么意见、见解或疑惑,欢迎留言讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 当你开始使用Java操作日期和时间的时候,会有一些棘手。你也许会通过System.currentTimeMilli...
    程序猿的那些事阅读 2,219评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,292评论 18 399
  • 黄昏 街角 博弈 智力和技巧 勇气和谋略 我不语 偷偷拍照 你们为保护自己的老将 在那个战场厮杀 我为了...
    云淡风轻之蓝阅读 283评论 4 11
  • 我们家附近的果园都是别人的,仔仔看到果园的橙子就想吃。我就和他去自己果园摘橙子。 刚接近自己的果园,仔仔就伸出双臂...
    秭归橙子格格阅读 811评论 4 7