JAVA从零开始19_常用API 日期和时间

一、Date

Java中的Date类是一个表示特定瞬间的时间,精确到毫秒的类。它位于java.util包中。然而,在Java 8及以后的版本中,建议使用java.time包下的新的日期和时间API(如LocalDateLocalTimeLocalDateTime等),因为它们提供了更强大且易于使用的功能。

尽管如此,我们仍然可以讨论一下Date类中的一些常用方法:

  1. Date():构造一个表示当前日期和时间的Date对象。

  2. Date(long date):构造一个根据指定毫秒数初始化的Date对象。

  3. getTime():返回自1970年1月1日0点0分0秒(UTC)以来的毫秒数。

  4. setTime(long time):设置时间,使用自1970年1月1日0点0分0秒(UTC)以来的毫秒数。

  5. toString():将Date对象转换为一个包含日期和时间信息的字符串。

  6. compareTo(Date anotherDate):比较两个日期。返回值小于、等于或大于零,表示此日期分别早于、等于或晚于指定的日期。

  7. equals(Object obj):比较两个Date对象是否相等。

  8. before(Date when):检查此日期是否在指定日期之前。

  9. after(Date when):检查此日期是否在指定日期之后。

以下是一些使用Java Date类的示例应用场景:

  1. 记录事件时间戳:
    在日志记录或事件追踪中,我们可能需要记录事件发生的时间。可以使用Date类来表示这个时间戳。
Date eventTimestamp = new Date();
  1. 测量代码执行时间:
    我们可以在代码执行前后分别创建Date对象,然后比较它们的时间差来测量代码执行时间。
Date startTime = new Date();
// Code to be measured
Date endTime = new Date();
long elapsedTime = endTime.getTime() - startTime.getTime();
System.out.println("Elapsed time in milliseconds: " + elapsedTime);
  1. 与遗留代码或第三方库集成:
    在某些情况下,可能需要与使用Date类的遗留代码或第三方库集成。在这种情况下,我们可能需要创建、处理和传递Date对象。

  2. java.sql.Datejava.sql.Timestamp进行转换:
    在使用JDBC处理数据库时,可能需要将java.util.Date转换为java.sql.Datejava.sql.Timestamp,以便将日期和时间数据存储在数据库中。

// Convert java.util.Date to java.sql.Date
java.util.Date utilDate = new Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

// Convert java.util.Date to java.sql.Timestamp
java.util.Date utilDate2 = new Date();
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(utilDate2.getTime());

请注意,尽管这些场景中仍然可以使用Date类,但在Java 8及更高版本中,使用新的日期和时间API(如InstantDurationLocalDateLocalTime等)可能会更加灵活和强大。


二、SimpleDateFormat

Java中的SimpleDateFormat类是一个用于对Date对象进行格式化和解析的类。它是java.text.DateFormat的一个具体子类,位于java.text包中。通过使用特定的模式,可以将Date对象转换为人类可读的字符串,或将字符串解析为Date对象。

以下是SimpleDateFormat类中一些常用方法的概述:

  1. SimpleDateFormat(String pattern):根据给定的模式构造一个新的SimpleDateFormat对象。模式是一个字符串,包含代表日期和时间元素的特殊字符。例如,yyyy-MM-dd HH:mm:ss表示年-月-日 时:分:秒。

  2. format(Date date):将给定的Date对象格式化为一个字符串,使用此SimpleDateFormat对象的模式。

  3. parse(String source):尝试将给定的字符串解析为一个Date对象,使用此SimpleDateFormat对象的模式。如果解析成功,返回一个Date对象;如果解析失败,抛出ParseException异常。

  4. setTimeZone(TimeZone zone):为此SimpleDateFormat对象设置时区。这将影响formatparse方法的结果。

  5. setLenient(boolean lenient):设置解析过程是否宽松。如果设置为true,解析器将尽量解释不完全符合模式的字符串;如果设置为false,解析器将严格按照模式解析字符串。

以下是一个简单的示例,展示如何使用SimpleDateFormat类:

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

public class Main {
   
    public static void main(String[] args) {
   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // Format a Date object to a string
        Date currentDate = new Date();
        String formattedDate = sdf.format(currentDate);
        System.out.println("Formatted date: " + formattedDate);

        // Parse a string to a Date object
        String dateString = "2023-04-21 12:30:00";
        try {
   
            Date parsedDate = sdf.parse(dateString);
            System.out.println("Parsed date: " + parsedDate);
        } catch (ParseException e) {
   
            System.err.println("Error parsing date: " + e.getMessage());
        }
    }
}

在这个示例中,我们创建了一个SimpleDateFormat对象,使用模式yyyy-MM-dd HH:mm:ss,然后分别演示了如何使用format方法将Date对象格式化为字符串,以及如何使用parse方法将字符串解析为Date对象。

以下是一些使用SimpleDateFormat类的示例应用场景:

  1. 将日期和时间转换为特定格式的字符串:
    当需要以特定格式显示日期和时间时,可以使用SimpleDateFormat类将Date对象转换为所需格式的字符串。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date currentDate = new Date();
String formattedDate = sdf.format(currentDate);
System.out.println("Formatted date: " + formattedDate);
  1. 从特定格式的字符串解析日期和时间:
    当从文本文件、数据库或用户输入中接收日期和时间字符串时,可以使用SimpleDateFormat类将字符串解析为Date对象。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = "2023-04-21";
try {
   
    Date parsedDate = sdf.parse(dateString);
    System.out.println("Parsed date: " + parsedDate);
} catch (ParseException e) {
   
    System.err.println("Error parsing date: " + e.getMessage());
}
  1. 将日期和时间转换为适合文件名的格式:
    当将日期和时间用作文件名的一部分时,可以使用SimpleDateFormat类将Date对象转换为适合文件名的格式。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
Date currentDate = new Date();
String formattedDateForFilename = sdf.format(currentDate);
String filename = "report_" + formattedDateForFilename + ".txt";
System.out.println("Filename: " + filename);
  1. 从一个时区转换为另一个时区:
    SimpleDateFormat类可以用于在不同时区之间转换日期和时间。
String dateString = "2023-04-21 12:30:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// Parse the date string to a Date object
Date date = sdf.parse(dateString);

// Convert the date to another timezone
TimeZone sourceTimeZone = TimeZone.getTimeZone("UTC");
TimeZone targetTimeZone = TimeZone.getTimeZone("Asia/Shanghai");
sdf.setTimeZone(sourceTimeZone);
long sourceTimeInMillis = date.getTime();
long targetTimeInMillis = sourceTimeInMillis + targetTimeZone.getOffset(sourceTimeInMillis) - sourceTimeZone.getOffset(sourceTimeInMillis);
Date targetDate = new Date(targetTimeInMillis);

System.out.println("Source date: " + sdf.format(date))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值