文字列の日付をタイムスタンプに変換する方法

JavaBeginner
オンラインで実践に進む

はじめに

文字列の日付は、Java の SimpleDateFormatTimestamp、および Date クラスを使用してタイムスタンプに変換できます。この実験(Lab)では、日付文字列をタイムスタンプに変換する 2 つの方法について説明します。

parse() メソッドを使用して文字列を日付に変換する

import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import java.util.Date;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // date in string format
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // creating date format
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
            // parsing string to date using parse() method
            Date parsedDate = dateFormat.parse(stringDate);
            // finally creating a timestamp
            Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println(e);
        }
    }
}

このプログラムを実行するには、ターミナルを開き、~/project/ ディレクトリに移動します。

valueOf() メソッドを使用して文字列の日付を Timestamp に変換する

これは、java.sql.Timestamp クラスの valueOf() メソッドを使用して、日付文字列をタイムスタンプに変換する別の方法です。これはシンプルな方法であり、オーバーヘッドコーディングを行う必要はありません。

import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import java.util.Date;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // date in string format
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // converting string date to timestamp using valueOf() method
            java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf(stringDate);
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println(e);
        }
    }
}

プログラムのコンパイルと実行

ターミナルを開き、~/project/ ディレクトリに移動します。以下のコマンドを使用して、コードをコンパイルしてから実行します。

javac StringToTimestamp.java && java StringToTimestamp

日付形式の間違いを処理する

文字列が不正な形式の場合、java.text.ParseException: Unparseable date: という例外エラーが発生します。このエラーを処理するために、エラーメッセージを表示する catch ブロックを追加できます。

import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import java.util.Date;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // date in string format
        String stringDate = "2021-01-07 02:02:16";
        try {
            // creating date format
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
            // parsing string to date using parse() method
            Date parsedDate = dateFormat.parse(stringDate);
            // finally creating a timestamp
            Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

エポックタイムをタイムスタンプに変換

以下のコードを使用して、エポック時間からタイムスタンプに変換します。

import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // epoch time
        long epochTime = 1609934536172L;
        try {
            // create Timestamp object
            Timestamp timestamp = new Timestamp(epochTime);
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

タイムスタンプを文字列に変換

SimpleDateFormat を使用して、タイムスタンプを文字列形式に変換します。

import java.text.SimpleDateFormat;
import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // timestamp
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());

        try {
            // create SimpleDateFormat object
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
            // format Timestamp object
            String formattedDate = dateFormat.format(timestamp);
            // print formatted date
            System.out.println(formattedDate);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Calendar クラスの使用方法

SimpleDateFormat の代わりに、Calendar クラスを使用して、文字列の日付をタイムスタンプに変換することもできます。

import java.util.Calendar;
import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // string date
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // create Calendar object
            Calendar calendar = Calendar.getInstance();
            // set calendar date with string date
            calendar.setTime(new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS").parse(stringDate));
            // convert calendar to timestamp
            java.sql.Timestamp timestamp = new java.sql.Timestamp(calendar.getTimeInMillis());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

ZonedDateTime クラスの使用方法

ZonedDateTime クラスを使用して、文字列の日付をタイムスタンプに変換することもできます。

import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // string date
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // create DateTimeFormatter object and specify the format of the string date
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
            // create ZonedDateTime object and parse the string date
            ZonedDateTime zonedDateTime = ZonedDateTime.parse(stringDate, formatter.withZone(ZoneId.systemDefault()));
            // convert ZonedDateTime to timestamp
            Timestamp timestamp = Timestamp.valueOf(zonedDateTime.toLocalDateTime());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

プログラムの実行

ターミナルを開き、~/project/ ディレクトリに移動します。以下のコマンドを使用して、コードをコンパイルしてから実行します。

javac StringToTimestamp.java && java StringToTimestamp

まとめ

この実験(Lab)では、SimpleDateFormatTimestampDateCalendar、および ZonedDateTime クラスなど、さまざまな方法を使用して、Java で文字列の日付をタイムスタンプに変換する方法を学びました。 SimpleDateFormatTimestamp の方法は実装が最も簡単ですが、ZonedDateTime の方法は最も複雑ですが、最も柔軟性を提供します。