Как преобразовать строку с датой в временную метку (timestamp)

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Строковое представление даты можно преобразовать в временную метку (timestamp) с использованием классов SimpleDateFormat, Timestamp и Date в Java. В этом лабораторном занятии (LabEx) будут рассмотрены два способа преобразования строки с датой в временную метку.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java/BasicSyntaxGroup -.-> java/output("Output") java/BasicSyntaxGroup -.-> java/type_casting("Type Casting") java/StringManipulationGroup -.-> java/strings("Strings") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/date("Date") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/format("Format") java/FileandIOManagementGroup -.-> java/io("IO") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/output -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/type_casting -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/strings -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/classes_objects -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/date -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/exceptions -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/format -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/io -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} java/string_methods -.-> lab-117426{{"Как преобразовать строку с датой в временную метку (timestamp)"}} end

Преобразование строки в дату с использованием метода 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/.

Преобразование строки с датой в временную метку (timestamp) с использованием метода valueOf()

Это еще один способ преобразования строки с датой в временную метку (timestamp) с использованием метода valueOf() класса java.sql.Timestamp. Это простой метод, и нет необходимости писать избыточный код.

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());
        }
    }
}

Преобразование эпохи времени (epoch time) в временную метку (timestamp)

Преобразуйте эпохи времени (epoch time) в временные метки (timestamp) с использованием следующего кода:

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());
        }
    }
}

Преобразование временной метки (timestamp) в строку

Преобразуйте временную метку (timestamp) в строковый формат с использованием 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 для преобразования строки с датой в временную метку (timestamp).

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

Мы также можем преобразовать строку с датой в временную метку (timestamp) с использованием класса 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) мы научились преобразовывать строку с датой в временную метку (timestamp) на Java различными способами, включая использование классов SimpleDateFormat, Timestamp, Date, Calendar и ZonedDateTime. Методы с использованием SimpleDateFormat и Timestamp являются самыми простыми в реализации, в то время как метод с использованием ZonedDateTime является самым сложным, но предоставляет наибольшую гибкость.