在Java中获取当前日期/时间的最佳方法是什么?


当前回答

您可以自己使用Date对象和格式。很难格式化并且需要更多的代码,

Date dateInstance = new Date();
int year = dateInstance.getYear()+1900;//Returns:the year represented by this date, minus 1900.
int date = dateInstance.getDate();
int month = dateInstance.getMonth();
int day = dateInstance.getDay();
int hours = dateInstance.getHours();
int min = dateInstance.getMinutes();
int sec = dateInstance.getSeconds();

String dayOfWeek = "";
switch(day){
    case 0:
        dayOfWeek = "Sunday";
        break;
    case 1:
        dayOfWeek = "Monday";
        break;
    case 2:
        dayOfWeek = "Tuesday";
        break;
    case 3:
        dayOfWeek = "Wednesday";
        break;
    case 4:
        dayOfWeek = "Thursday";
        break;
    case 5:
        dayOfWeek = "Friday";
        break;
    case 6:
        dayOfWeek = "Saturday";
        break;
}
System.out.println("Date: " + year +"-"+ month + "-" + date + " "+ dayOfWeek);
System.out.println("Time: " + hours +":"+ min + ":" + sec);

输出:

Date: 2017-6-23 Sunday
Time: 14:6:20

正如您所看到的,这是最糟糕的方法,根据oracle文档,它已被弃用。

Oracle文档:

类Date表示特定的时间瞬间,以毫秒为单位精确在JDK1.1之前,Date类有两个额外的函数。它允许将日期解释为年、月、日、小时、分钟、,和第二值。它还允许格式化和解析日期串。不幸的是,这些函数的API不适用国际化。从JDK1.1开始,Calendar类应该是用于在日期和时间字段与DateFormat类之间转换应用于格式化和解析日期字符串。相应的Date中的方法已弃用。

因此,您也可以使用Calendar类,

Calendar.YEAR;
//and lot more

要获取当前时间,可以使用:

Calendar rightNow = Calendar.getInstance();

文件:与其他区域设置敏感类一样,Calendar提供了一个类方法,getInstance,用于获取此类型的通常有用的对象。Calendar的getInstance方法返回其日历字段已用当前日期和时间初始化

以下代码用于获取唯一日期

Date rightNow = Calendar.getInstance().getTime();
System.out.println(rightNow);

此外,Calendar类具有子类。GregorianCalendar是其中之一,也是日历的具体子类,它提供了世界上大多数人使用的标准日历系统。

使用GregorianLendar的示例:

Calendar cal = new GregorianCalendar();
int hours = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int ap = cal.get(Calendar.AM_PM);

String amVSpm;
if(ap == 0){
    amVSpm = "AM";
}else{
    amVSpm = "PM";
}

String timer = hours + "-" + minute + "-" + second + " " +amVSpm;
System.out.println(timer);

您可以使用SimpleDateFormat,一种简单快速的日期格式设置方法:

String pattern = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

String date = simpleDateFormat.format(new Date());
System.out.println(date);

阅读Jakob Jenkov教程:Java SimpleDateFormat。

正如其他人提到的,当我们需要从日期进行操作时,我们没有简单而最佳的方法,或者我们无法满足内置类、API的要求。

例如,当我们需要在两个日期之间进行比较时,当我们要比较两个日期时(也有内置的方法),等等。我们不得不使用第三方图书馆。其中一个好的和受欢迎的是Joda Time。

另请阅读:

如何在Joda time中正确获取当前日期和时间?JodaTime-如何获取UTC的当前时间JodaTime示例。下载Joda

.最开心的事情是现在(在java8中),没有人因为任何原因需要下载和使用库。一个在Java 8中获取当前日期和时间的简单示例,

LocalTime localTime = LocalTime.now();
System.out.println(localTime);

//with time zone
LocalTime localTimeWtZone = LocalTime.now(ZoneId.of("GMT+02:30"));
System.out.println(localTimeWtZone);

一篇关于Java8日期的好博文。

记住要了解更多关于Java日期和时间的信息,因为有很多方法和/或有用的方法可以获取/使用。

日期和时间的Oracle教程。Oracle格式化程序教程。课:标准日历。

编辑:

根据@BasilBourque的评论,像java.util.date、java.util.Calendar和java.text.SimpleTextFormat这样麻烦的旧日期时间类现在已经过时,取而代之的是java.time类。

其他回答

首先了解java.util.Date类

1.1如何获取当前日期

import java.util.Date;

class Demostration{
    public static void main(String[]args){
        Date date = new Date(); // date object
        System.out.println(date); // Try to print the date object
    }
}

1.2如何使用getTime()方法

import java.util.Date;
public class Main {
    public static void main(String[]args){
        Date date = new Date();
        long timeInMilliSeconds = date.getTime();
        System.out.println(timeInMilliSeconds);
    }
}

这将返回自1970年1月1日00:00:00 GMT以来的毫秒数,用于时间比较。

1.3如何使用SimpleDateFormat类设置时间格式

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

class Demostration{
    public static void main(String[]args){
        Date date=new Date();
        DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate=dateFormat.format(date);
        System.out.println(formattedDate);
    }
}

也可以尝试使用不同的格式模式,如“yyyy-MM-dd hh:MM:ss”,并选择所需的模式。http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

了解java.util.Calendar类

2.1使用日历类获取当前时间戳

import java.util.Calendar;

class Demostration{
    public static void main(String[]args){
        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar.getTime());
    }
}

2.2尝试使用setTime和其他设置方法将日历设置为不同的日期。

资料来源:http://javau91.blogspot.com/

(注意:仅适用于Java版本<8。对于Java 8+,请检查其他回复。)

如果您只需要输出格式为YYYY.MM.DD-HH.MM.SS(非常常见的情况)的时间戳,那么下面是方法:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());

新的数据时间API是随着Java8的诞生而引入的。这是到期的以下是旧数据时间API中导致的问题。难以处理时区:需要编写大量代码来处理时区。非线程安全:java.util.Date不是线程安全的。

所以,看看Java 8吧

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;


public class DataTimeChecker {

    public static void main(String args[]) {
        DataTimeChecker dateTimeChecker = new DataTimeChecker();
        dateTimeChecker.DateTime();
    }

    public void DateTime() {
        // Get the current date and time
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println("Current DateTime: " + currentTime);

        LocalDate date1 = currentTime.toLocalDate();
        System.out.println("Date : " + date1);

        Month month = currentTime.getMonth();
        int day = currentTime.getDayOfMonth();
        int seconds = currentTime.getSecond();

        System.out.println("Month : " + month);
        System.out.println("Day : " + day);
        System.out.println("Seconds : " + seconds);

        LocalDateTime date2 = currentTime.withDayOfMonth(17).withYear(2018);
        System.out.println("Date : " + date2);

        //Prints 17 May 2018
        LocalDate date3 = LocalDate.of(2018, Month.MAY, 17);
        System.out.println("Date : " + date3);

        //Prints 04 hour 45 minutes
        LocalTime date4 = LocalTime.of(4, 45);
        System.out.println("Date : " + date4);

        // Convert to a String 
        LocalTime date5 = LocalTime.parse("20:15:30");
        System.out.println("Date : " + date5);
    }
}

上述编码的输出:

Current DateTime: 2018-05-17T04:40:34.603
Date : 2018-05-17
Month : MAY
Day : 17
Seconds : 34
Date : 2018-05-17T04:40:34.603
Date : 2018-05-17
Date : 04:45
Date : 20:15:30

你看过java.util.Date吗?这正是你想要的。

Java 8或更高版本

LocalDateTime.now() and ZonedDateTime.now()