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


当前回答

只需尝试以下代码:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CurrentTimeDateCalendar {
    public static void getCurrentTimeUsingDate() {
        Date date = new Date();
        String strDateFormat = "hh:mm:ss a";
        DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
        String formattedDate= dateFormat.format(date);
        System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
    }
    public static void getCurrentTimeUsingCalendar() {
        Calendar cal = Calendar.getInstance();
        Date date=cal.getTime();
        DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        String formattedDate=dateFormat.format(date);
        System.out.println("Current time of the day using Calendar - 24 hour format: "+ formattedDate);
    }
}

其样本输出为:

使用日期-12小时格式的当前时间:11:13:01 PM使用日历的当前时间-24小时格式:23:13:01

更多信息:

在Java中获取当前日期时间

其他回答

首先了解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或更高版本

LocalDateTime.now() and ZonedDateTime.now()

您可以自己使用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类。

如果希望当前日期为字符串,请尝试以下操作:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

or

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));

http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/

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

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

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