zoukankan      html  css  js  c++  java
  • Java中字符串与日期之间的转换

      项目过程中,经常遇到需要字符串格式的日期和Date类型的日期之间的相互转换。使用SimpleDateFormat类,可以方便完成想要的转换。

      SimpleDateFormat能够实现本地化的时间格式化及转换。从选定一个自定义的模式(pattren)开始,模式由已经定义好的 'A' to 'Z' 'a' to 'z'字母组成,也可以在模式中引入文本,但要使用’(单括号)括住。下图就是已经定义好的模式字母表:

    LetterDate or Time ComponentPresentationExamples
    G Era designator Text AD
    y Year Year 1996; 96
    Y Week year Year 2009; 09
    M Month in year Month July; Jul; 07
    w Week in year Number 27
    W Week in month Number 2
    D Day in year Number 189
    d Day in month Number 10
    F Day of week in month Number 2
    E Day name in week Text Tuesday; Tue
    u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
    a Am/pm marker Text PM
    H Hour in day (0-23) Number 0
    k Hour in day (1-24) Number 24
    K Hour in am/pm (0-11) Number 0
    h Hour in am/pm (1-12) Number 12
    m Minute in hour Number 30
    s Second in minute Number 55
    S Millisecond Number 978
    z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
    Z Time zone RFC 822 time zone -0800
    X Time zone ISO 8601 time zone -08; -0800; -08:00

      在一个模式中,模式字母可以重复,不同数量的字母代表不同的意思:

    1. text类型:格式化时,如果模式字母数量大于等于4,则使用完整格式表示(EEEE表示要将星期名字格式化为非缩写如Monday);转换时,结果不受字母数量的影响,都接受。
    2. number类型:格式化时,模式字母的重复次数就是格式化后最小位数,不够的用0填充(如"dddd"表示将日期格式化为4为数字,但日期最大为2为,所以导致高两位的数字被0填充,0011,表示11日);转换时:同格式化类似。
    3. Month类型:格式化时:如果模式字母重复次数大于或等于3,则被解释为text类型(July,Jul等),否则就解释为数字型。转换时:模式要和被转换的字符串对应,例如月份"12"对应的模式为"MM"或者"M",但是不能为"MMM",除非字符串为"OCT"或者"October";

      下面看看几个应用:

    Long now = System.currentTimeMillis();
    SimpleDateFormat sdf2 = new SimpleDateFormat("MM ddddddddddd,yyyy EEEE");
    System.out.println(sdf2.format(now));
    输出:
    07 00000000031,2014 星期四 //日数的格式化模式过长,高位用0填充,星期为中文表示,默认情况下,

    Long now = System.currentTimeMillis();
    SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd,yyyy EEEE",Locale.US);
    System.out.println(sdf2.format(now));
    输出:
    July 31,2014 Thursday //指定地区为US,则以US格式输出,MMMM表示月份为完整文本类型

    转换:

    String dateString = "2000,October 22 10:10:11";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MMMM dddd HH:mm:ss",Locale.ENGLISH);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:
    Sun Oct 22 10:10:11 CST 2000

    String dateString = "2000,October 22 10:10:11";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MM dddd HH:mm:ss",Locale.ENGLISH);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:不能转换,因为被转换的字符串的月份为完整文本类型,模式也要为"MMMM"

    String dateString = "2000,10 22 10:10:11";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MM dddd HH:mm:ss",Locale.ENGLISH);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:
    Sun Oct 22 10:10:11 CST 2000 //月份为数字,模式对应为少于3为的”MM“,

    String dateString = "2000,10 22 10:10";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MM dddd HH:mm:ss",Locale.ENGLISH);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:不能转换,因为被转换的字符串没有秒的数字,但模式包含了秒,无法确定秒为多少。

    String dateString = "2000,10 22 10:10:11";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MM dddd HH:mm",Locale.ENGLISH);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:
    Sun Oct 22 10:10:00 CST 2000 //模式没有指定秒,但是转换字符串有,但不影响转换,只是结果的秒为0;

    String dateString = "2000,十月 22 10:10:11";       
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MMM dddd HH:mm",Locale.PRC);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:
    Sun Oct 22 10:10:00 CST 2000 //注意被转换的字符串包含了中国的月份表示,SimpleDateFormat实例也要指明地区为中国,否则转换失败

    String dateString = "2000,十月 22 10:10:
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm",Locale.PRC);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:
    不能转换,不转换的字符串日期格式和模式不匹配,而且月份模式字母重复次数要大于或等于3

    String dateString = "2000/十月/22 10:10:
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MMM/dd HH:mm",Locale.PRC);
    Date d = sdf.parse(dateString);
    System.out.println(d.toString());
    输出:
    Sun Oct 22 10:10:00 CST 2000


    不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之
  • 相关阅读:
    在 electron-vue 中的 Windows 下的路径问题,path.resolve 替换为 path.posix.join 。
    NLTK数据包下载频繁报错——解决方法
    常用正则表达式匹配
    NLTK的安装与简单测试
    Scrapy模块使用出错,出现builtins.ImportError: DLL load failed: 找不到指定的程序
    正则表达式手册
    数据分布vs聚类-数据预处理技巧-对数变换
    Python机器学习入门(1)之导学+无监督学习
    Pygame游戏开发入门(1)-开发框架
    Python-文件和数据格式化
  • 原文地址:https://www.cnblogs.com/lauyu/p/3879709.html
Copyright © 2011-2022 走看看