Java时间显示一长串是什么类型

在Java编程中,我们经常会遇到需要处理时间的场景,比如记录日志、计时、定时任务等等。Java提供了一系列日期和时间相关的API,可以帮助我们方便地处理时间。然而,有时候我们会发现在输出时间时,得到的是一长串看不懂的字符,那么这到底是什么类型呢?

问题描述

假设我们有一个程序,在其中获取当前时间并输出。我们使用以下代码来实现:

import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println(now);
    }
}

然后我们运行程序,发现输出的结果是一串看不懂的字符,比如Sun Sep 19 17:52:47 CST 2021。这个输出结果是什么类型呢?为什么不是我们期望的时间格式呢?

Date类的toString方法

在上述代码中,now是一个Date类型的对象,我们调用了它的toString方法来进行输出。Date类的toString方法返回的是一个包含日期和时间的字符串表示。具体来说,它返回的是按照以下格式生成的字符串:

E MMM dd HH:mm:ss zzz yyyy

  • E:星期几的缩写,比如Sun代表星期日
  • MMM:月份的缩写,比如Sep代表九月
  • dd:月份中的日期,比如19代表19号
  • HH:24小时制的小时数,比如17代表17点
  • mm:分钟数,比如52代表52分
  • ss:秒数,比如47代表47秒
  • zzz:时区,比如CST代表中国标准时间
  • yyyy:四位数的年份,比如2021

因此,Sun Sep 19 17:52:47 CST 2021就是按照上述格式生成的字符串。但是,这个字符串不是我们通常期望的时间格式。

格式化日期和时间

为了以我们期望的格式显示日期和时间,Java提供了SimpleDateFormat类。我们可以使用它来指定日期和时间的格式,并将Date对象转换为我们指定的格式。

以下是一个示例代码:

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

public class Main {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(now);
        System.out.println(formattedDate);
    }
}

在上述代码中,我们创建了一个SimpleDateFormat对象,并通过传入一个日期和时间格式的字符串来指定格式。yyyy-MM-dd HH:mm:ss表示年-月-日 时:分:秒的格式。

然后,我们调用format方法将Date对象转换为指定格式的字符串,并将其输出。这样,我们就可以得到一个符合我们期望的时间格式,比如2021-09-19 17:52:47

更多时间格式化的选项

除了上述示例中使用的yyyy-MM-dd HH:mm:ss格式外,SimpleDateFormat还支持其他多种时间格式化的选项。以下是一些常用的格式化字符:

  • y:年份,比如2021
  • M:月份,比如9
  • d:月份中的日期,比如19
  • H:24小时制的小时数,比如17
  • m:分钟数,比如52
  • s:秒数,比如47

我们可以根据自己的需求来组合这些字符,以得到符合我们期望的时间格式。

甘特图

下面是一个使用mermaid语法绘制的甘特图,展示了时间格式化的过程:

gantt
    dateFormat  YYYY-MM-DD
    title 时间格式化的过程

    section 获取当前时间
    获取当前时间    :a1, 2021-09-19, 1d
    输出当前时间    :done, a1, 2021-09