如何将字符串转换为日期– Java

在本教程中,我们将向您展示如何将String转换为java.util.Date 。 许多Java初学者都被困在Date转换中,希望本摘要指南能以某种方式为您提供帮助。

// String -> Date
    SimpleDateFormat.parse(String);

    // Date -> String
    SimpleDateFormat.format(date);

有关java.text.SimpleDateFormat使用的一些常见日期和时间模式,请参见下表,请参考此JavaDoc。

描述 例子
ÿ 2013年
中号 一年中的月份 7月7日,7日
d 每月的一天 1-31
Ë 星期几 星期五,星期日
一个 上午/下午标记 上午下午
H 一天中的小时 0-23
H 上午/下午 1-12
一小时内 0-60
s 分钟 0-60

注意
您可能对此Java 8示例感兴趣- 如何将String转换为LocalDate

1.字符串= 2013年6月7日

如果为3’M’,则月份解释为文本(Mon-Dec),否则解释为数字(01-12)。

TestDateExample1.java

package com.mkyong.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDateExample1 {

    public static void main(String[] argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
        String dateInString = "7-Jun-2013";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

输出量

Fri Jun 07 00:00:00 MYT 2013
07-Jun-2013

2.字符串= 2013年7月6日

TestDateExample2.java

package com.mkyong.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDateExample2 {

    public static void main(String[] argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        String dateInString = "07/06/2013";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

输出量

Fri Jun 07 00:00:00 MYT 2013
07/06/2013

3.字符串= 2013年6月7日,星期五

TestDateExample3.java

package com.mkyong.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDateExample3 {

    public static void main(String[] argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("E, MMM dd yyyy");
        String dateInString = "Fri, June 7 2013";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

输出量

Fri Jun 07 00:00:00 MYT 2013
Fri, Jun 07 2013

4.字符串= 2013年6月7日,星期五,12:10:56 PM

TestDateExample4.java

package com.mkyong.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDateExample4 {

    public static void main(String[] argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("EEEE, MMM dd, yyyy HH:mm:ss a");
        String dateInString = "Friday, Jun 7, 2013 12:10:56 PM";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

输出量

Fri Jun 07 12:10:56 MYT 2013
Friday, Jun 07, 2013 12:10:56 PM

5.字符串= 2014-10-05T15:23:01Z

Z后缀表示UTC, java.util.SimpleDateFormat无法正确解析它,您需要将后缀Z替换为’+0000’。

TestDateExample5.java

package com.mkyong.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDateExample5 {

    public static void main(String[] argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        String dateInString = "2014-10-05T15:23:01Z";

        try {

            Date date = formatter.parse(dateInString.replaceAll("Z$", "+0000"));
            System.out.println(date);

            System.out.println("time zone : " + TimeZone.getDefault().getID());
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

输出量

Sun Oct 05 23:23:01 MYT 2014
time zone : Asia/Kuala_Lumpur
2014-10-05T23:23:01+0800

在Java 8中,可以将其转换为java.time.Instant对象,并在指定的时区显示它。

TestDateExample6.java

package com.mkyong.date;

import java.time.*;

public class TestDateExample6 {

    public static void main(String[] argv) {

        String dateInString = "2014-10-05T15:23:01Z";

        Instant instant = Instant.parse(dateInString);

        System.out.println(instant);

        //get date time only
        LocalDateTime result = LocalDateTime.ofInstant(instant, ZoneId.of(ZoneOffset.UTC.getId()));

        System.out.println(result);

        //get date time + timezone
        ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Africa/Tripoli"));
        System.out.println(zonedDateTime);

        //get date time + timezone
        ZonedDateTime zonedDateTime2 = instant.atZone(ZoneId.of("Europe/Athens"));
        System.out.println(zonedDateTime2);
        
    }

}

输出量

2014-10-05T15:23:01Z
2014-10-05T15:23:01
2014-10-05T17:23:01+02:00[Africa/Tripoli]
2014-10-05T18:23:01+03:00[Europe/Athens]

参考文献

  1. SimpleDateFormat JavaDoc
  2. Java 8 –如何将字符串转换为LocalDate
  3. Stackoverflow:simpledateformat使用“ Z”文字解析日期
  4. 维基百科:ISO 8601
  5. 时区和偏移量类
  6. GMT VS UTC
  7. 什么是时区?
  8. 乔达时间

标签:
转换
日期
即时
java8
时区

翻译自: https://mkyong.com/java/how-to-convert-string-to-date-java/

    原文作者:cyan20115
    原文地址: https://blog.csdn.net/cyan20115/article/details/106551240
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞