在 Java 中转换字符串到 DateTime 对象

本文将介绍我们如何使用不同的方法和例子将给定的字符串转换为一个 DateTime 对象。

在 Java 中使用 SimpleDateFormatjava.util.Date 把一个日期字符串转换为 DateTime 对象

SimpleDateFormat 是一个用于以本地化敏感方式解析和格式化日期的类。它允许我们将一个字符串转换为 DateTime,并将一个 DateTime 对象转换为一个字符串。

在下面的代码中,我们使用了一个字符串 date_time,通过调用 SimpleDateFormat 实例 dateParser 上的 parse 方法来解析。我们希望字符串 date_time 被解析的格式是在 SimpleDateFormat 构造函数中指定的。

我们还创建了一个新的 SimpleDateFormat 类的实例,并使用不同的格式。解析后的 date 将被格式化并打印出来。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDateTime {
    public static void main(String [] args){
        String date_time = "11/27/2020 05:35:00";
        SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
        {
            try {
                Date date = dateParser.parse(date_time);
                System.out.println(date);
                SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yy");
                System.out.println(dateFormatter.format(date));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }
}

输出:

Fri Nov 27 05:35:00 UTC 2020
11/27/20

使用 Java 8 日期和时间库将日期字符串转换为日期时间格式

LocaleDate 类表示不含时间的 ISO 格式的日期。DateTimeFormatter 类用于解析不同格式的日期。我们可以通过调用 DateTimeFormatter 上的 ofPattern() 方法提供自定义模式。

LocaleDate 有一个 parse() 方法,它将自定义的文本字符串和特定的格式器 inputFormat 进行解析,得到一个 LocalDate 实例。获得的 LocaleDate 实例 date 然后被格式化并打印为输出。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
    public static void main(String [] args){
        DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
        LocalDate date = LocalDate.parse("11/27/2020 05:35:00", inputFormat);
        DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy");
        System.out.println(date.format(outputFormat));
    }
}

输出:

11/27/2020

使用 joda-time 将日期字符串转换为日期时间格式

joda-time 是一个标准的 DateTime 库,它提供了丰富的方法来执行日期和时间计算。下面给出了包含该库功能的 maven 依赖关系。

 <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.8</version>
    </dependency>

DateTimeFormatter 可以解析日期和时间的自定义表示。

我们用自定义模式创建一个 formatter 实例 datetimeformat。在 formatter 实例上调用 parseDateTime,使用自定义字符串 dateTime 给出一个 DateTime 对象。

在这里,我们创建了一个新的 DateTimeFormatter 实例 dateTimeFormatOut,使用不同的自定义模式。print() 方法在新的实例上被调用,它以新的格式打印 DateTime 对象 joda_time

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class StringToDateTime {
    public static void main(String [] args){
        String dateTime = "11/27/2020 05:35:00";
        DateTimeFormatter datetimeformat = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
        DateTime joda_time = datetimeformat.parseDateTime(dateTime);
        System.out.println("joda_time : "+joda_time);
        DateTimeFormatter dateTimeFormatOut = DateTimeFormat.forPattern("MM/dd/yyyy");
        System.out.println("date time format out:  "+dateTimeFormatOut.print(joda_time));
    }
}

输出:

joda_time : 2020-11-27T05:35:00.000+05:30
date time format out:  11/27/2020

在 Java 中使用 Timestamp 构造函数将字符串日期 Date 转换为时间戳 Timestamp

在这里,我们使用 Timestamp 构造函数来获取一个时间戳 Timestamp 对象。首先,我们使用 SimpleDateFormat 类设置 date 的格式,然后使用 parser() 方法得到日期对象,然后使用 geteTime() 方法将时间与日期相加,得到一个 timestamp 的结果。请看下面的例子。

import java.util.Date;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class SimpleTesting {
    public static void main(String[] args) {
        try {
              DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
              Date date = dateFormat.parse("12/10/1990");
              Timestamp timeStampDate = new Timestamp(date.getTime());
              System.out.println(timeStampDate);
            } catch (ParseException e) {
              System.out.println(e);
            }
    }
}

输出:

 1990-10-12 00:00:00.0

在 Java 中用 LocalDate 将日期字符串转换为时间戳

在 Java 8 中,它增加了一个新的 java.time 包,其中包含几个处理日期和时间的类。在这里,我们使用该包中的 LocalDate 类。我们使用 LocalDate 类的 parse() 方法从日期字符串中得到 LocalDate 对象,然后使用 atTime() 方法得到 LocalDateTime 对象,返回一个带时间的日期。now() 用于获取系统的当前时间。

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class SimpleTesting {
    public static void main(String[] args) {
              LocalDate date = LocalDate.parse("2025-11-25");
              System.out.println(date);
              LocalDateTime dateTime = date.atTime(LocalTime.now());
              System.out.println(dateTime);
    }
}

输出:

2025-11-25
2025-11-25T09:44:56.814795

在 Java 中使用 atStartOfDay() 方法将字符串日期转换为时间戳

LocalDate 类中的 atStartOfDay() 方法也用于获取 LocalDateTime 对象。该方法在一天开始时将时间添加到日期中,并返回一个日期-时间而不是一个简单的日期。请看下面的例子。

import java.time.LocalDate;
import java.time.LocalDateTime;
public class SimpleTesting {
    public static void main(String[] args) {
        String strDate = "2019-10-20";
        LocalDate date = LocalDate.parse(strDate);
        LocalDateTime dateTime = date.atStartOfDay();
        System.out.println(dateTime);
    }
}

输出:

2019-10-20T00:00

在 Java 中转换字符串为输入流

我们将讨论如何在 Java 中使用几种方法将一个字符串转换为一个 InputStream。字符串是一组字符,而 InputStream 是一组字节。让我们看看如何在 Java 中把字符串转换为 InputStream

在 Java 中使用 ByteArrayInputStream() 把一个字符串转换为 InputStream

Java 的 Input/Output 包中有一个类 ByteArrayInputStream,可以将字节数组读取为 InputStream。首先,我们使用 getBytes()exampleString 中获取字符集为 UTF_8 的字节,然后传递给 ByteArrayInputStream

为了检查我们的目标是否成功,我们可以使用 read() 读取 inputStream,并将每个字节转换为 char。这将返回我们的原始字符串。

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class Main {
    public static void main(String[] args) throws IOException {
        String exampleString = "This is a sample string";
        InputStream inputStream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));
      //To check if we can read the string back from the inputstream
        int i;
        while ((i = inputStream.read()) != -1){
            char getSingleChar = (char)i;
            System.out.print(getSingleChar);
        }
    }
}

输出:

This is a sample string

使用 StringReaderReaderInputStream 将字符串转换为 InputStream

将字符串转换为 InputStream 的第二种技术使用两个方法,即 StringReaderReaderInputStream。前者用于读取字符串并将其包入 reader 中,而后者则需要两个参数,一个 reader 和 charsets。最后,我们得到 InputStream

import org.apache.commons.io.input.ReaderInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;
public class Main {
    public static void main(String[] args) throws IOException {
        String exampleString = "This is a sample string";
        StringReader stringReader = new StringReader(exampleString);
        InputStream inputStream = new ReaderInputStream(stringReader, StandardCharsets.UTF_8);
        //To check if we can read the string back from the inputstream
        int i;
        while ((i = inputStream.read()) != -1){
            char getSingleChar = (char)i;
            System.out.print(getSingleChar);
        }
    }
}

输出:

This is a sample string

使用 org.apache.commons.io.IOUtils 将字符串转换为 InputStream

我们还可以使用 Apache Commons 库来使我们的任务变得更简单。这个 Apache Commons 库的 IOUtls 类有一个 toInputStream() 方法,它接受一个字符串和要使用的 charset。这个方法是最简单的,因为我们只需要调用一个方法就可以将 Java 字符串转换为 InputStream

import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class Main {
    public static void main(String[] args) throws IOException {
        String exampleString = "This is a sample string";
        InputStream is = IOUtils.toInputStream(exampleString, StandardCharsets.UTF_8);
        //To check if we can read the string back from the inputstream
        int i;
        while ((i = is.read()) != -1){
            char getSingleChar = (char)i;
            System.out.print(getSingleChar);
        }
    }
}

输出:

This is a sample string