# 如何使用 Java 获取当前日期时间

原文：http://zetcode.com/articles/javacurrentdatetime/

Java 当前日期时间教程介绍了各种 Java 类，以获取 Java 中的当前日期时间。

有几种方法可以获取 Java 中的当前日期和时间。 Java 程序员可以使用 Java8（`java.time`）中引入的现代日期和时间 API，经典的，过时的 API（`java.util`）和第三方 Joda 库。

## 使用`java.time`的当前日期和时间

`java.time`包包含日期，时间，瞬间和持续时间的主要 API。 它是对过时的`java.util`日期和时间 API 的现代替代。

### 使用`Instant`获取当前日期和时间

`java.time.Instant`在时间轴上模拟单个瞬时点。 这可用于记录应用中的事件时间戳。

`JavaCurrentDateInstant.java`

```java
package com.zetcode;

import java.time.Instant;

public class JavaCurrentDateInstant {

    public static void main(String[] args) {

        Instant instant = Instant.now();
        System.out.println(instant);
    }
}

```

该代码示例使用`java.time.Instant`获取当前日期和时间。

```java
Instant instant = Instant.now();

```

`Instant.now()`方法从系统时钟获取当前时刻。

### 使用`LocalDateTime`获取当前日期和时间

`java.time.LocalDateTime`创建不带时区的日期时间。

`JavaCurrentDateLocalDateTime.java`

```java
package com.zetcode;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class JavaCurrentDateLocalDateTime {

    public static void main(String[] args) {

        LocalDateTime now = LocalDateTime.now();

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println(dtf.format(now));
    }
}

```

该示例使用`java.time.LocalDateTime`获取当前日期时间，并使用`java.time.format.DateTimeFormatter`对其进行格式化。

```java
LocalDateTime now = LocalDateTime.now();

```

`LocalDateTime.now()`方法从系统时钟以默认时区获取当前日期时间。

### 使用`ZonedDateTime`获取当前日期和时间

`java.time.ZonedDateTime`是带有时区的日期时间的不变表示。

`JavaCurrentDateTimeZonedDateTime.java`

```java
package com.zetcode;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class JavaCurrentDateTimeZonedDateTime {

    public static void main(String[] args) {

        ZonedDateTime now = ZonedDateTime.now();

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println(dtf.format(now));        
    }
}

```

该示例使用`java.time.ZonedDateTime`获取当前日期时间，并使用`java.time.format.DateTimeFormatter`对其进行格式化。

```java
ZonedDateTime now = ZonedDateTime.now();

```

`ZonedDateTime.now()`方法从系统时钟以默认时区获取当前日期时间。

### 使用`Clock`获取当前日期和时间

`java.time.Clock`使用时区提供对当前时刻，日期和时间的访问。

`JavaCurrentDateTimeClock.java`

```java
package com.zetcode;

import java.time.Clock;
import java.time.Instant;

public class JavaCurrentDateTimeClock {

    public static void main(String[] args) {

        Clock clock = Clock.systemDefaultZone();

        Instant now = clock.instant();
        System.out.println(now);
    }
}

```

该示例使用`java.time.Clock`获取当前日期时间。

```java
Clock clock = Clock.systemDefaultZone();

```

`Clock.systemDefaultZone()`方法获得一个时钟，该时钟使用最佳可用系统时钟返回当前时刻，并使用默认时区转换为日期和时间。

## 使用`java.util`的当前日期和时间

`java.util`（`Date`和`Calendar`）中可用的类被认为已过时。 这是原始的 Java 日期和时间 API。

### 使用`Date`获取当前日期和时间

`java.util.Date`表示特定的时间瞬间，精度为毫秒。

`JavaCurrentDateTimeDate.java`

```java
package com.zetcode;

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

public class JavaCurrentDateTimeDate {

    public static void main(String[] args) {

        Date now = new Date();

        DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        System.out.println(df.format(now));
    }
}

```

该示例使用`java.util.Date`获取当前日期时间，并使用`java.text.SimpleDateFormat`对其进行格式化。

### 使用`Calendar`获取当前日期和时间

`java.util.Calendar`表示特定的时间瞬间，精度为毫秒。

`JavaCurrentDateTimeCalendar.java`

```java
package com.zetcode;

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

public class JavaCurrentDateTimeCalendar {

    public static void main(String[] args) {

        Date now = Calendar.getInstance().getTime(); 

        DateFormat df = new SimpleDateFormat("yyyy-MM-d HH:mm:ss");

        System.out.println(df.format(now));
    }
}

```

该示例使用`java.util.Calendar`获取当前日期时间，并使用`java.text.SimpleDateFormat`对其进行格式化。

## 使用 Joda 时间库的当前日期和时间

Joda time 是第三方日期和时间库，用于替换过时的 JDK 日期时间 API。

```java
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.9.9</version>
</dependency>

```

我们需要`joda-time`依赖项。

### 使用 Joda `LocalDateTime`获取当前日期和时间

`org.joda.time.LocalDateTime`是不可修改的日期时间类，表示没有时区的日期时间。

`JavaCurrentDateTimeJoda.java`

```java
package com.zetcode;

import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class JavaCurrentDateTimeJoda {

    public static void main(String[] args) {

        LocalDateTime ldt = new LocalDateTime();

        DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy, MMMM dd, HH:mm:ss");
        String str = fmt.print(ldt);

        System.out.println(str);
    }
}

```

该示例使用`org.joda.time.LocalDateTime`获取当前日期时间，并使用`org.joda.time.format.DateTimeFormatter`对其进行格式化。

### 使用 Joda `DateTime`获取当前日期和时间

`org.joda.time.DateTime`是不可修改的日期时间类的标准实现。

`JavaCurrentDateTimeJoda2.java`

```java
package com.zetcode;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class JavaCurrentDateTimeJoda2 {

    public static void main(String[] args) {

        DateTime dt = DateTime.now();

        DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy, MMMM dd, HH:mm:ss");
        String str = fmt.print(dt);

        System.out.println(str);
    }
}

```

该示例使用`org.joda.time.DateTime`获取当前日期时间，并使用`org.joda.time.format.DateTimeFormatter`对其进行格式化。

在本教程中，我们展示了如何获取 Java 中的当前日期和时间。 您可能也对相关教程感兴趣： [Java `HashSet`教程](/java/hashset/)， [Java `HashMap`教程](/java/hashmap/)， [Java 中的`HashMap`迭代](/java/hashmapiterate/)， [Java `static`关键字](/java/statickeyword/) ， [Java Swing 教程](/tutorials/javaswingtutorial/)， [Java 教程](/lang/java/)，[用 Java 显示图像](/java/displayimage/)。