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


当前回答

在Java 8中,它是:

LocalDateTime.now()

如果您需要时区信息:

ZonedDateTime.now()

如果您想打印花式格式化字符串:

System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))

其他回答

import java.util.*;
import java.text.*;

public class DateDemo {
   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      System.out.println("Current Date: " + ft.format(dNow));
   }
}

你可以用数据来表示场效应晶体管的电流数据。所以使用SimpleDateFormat获取格式

首先了解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/

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

这取决于您想要的日期/时间形式:

如果您希望日期/时间是一个单一的数值,那么System.currentTimeMillis()会给出该值,表示为UNIX纪元后的毫秒数(Java long)。该值是UTC时间点的增量,与本地时区1无关。如果您希望日期/时间以允许您以数字方式访问组件(年、月等)的形式显示,则可以使用以下选项之一:new Date()为您提供了一个用当前日期/时间初始化的Date对象。问题是DateAPI方法大多有缺陷。。。并且已弃用。Calendar.getInstance()使用默认的Locale和TimeZone为您提供一个用当前日期/时间初始化的Calendar对象。其他重载允许您使用特定的区域设置和/或时区。日历工作。。。但是API仍然很麻烦。neworg.joda.time.DateTime()为您提供了一个使用默认时区和年表用当前日期/时间初始化的joda时间对象。还有很多其他Joda替代品。。。太多了,这里无法描述。(但请注意,有些人报告Joda time存在性能问题。https://stackoverflow.com/questions/6280829.)在Java 8中,调用Java.time.LocalDateTime.now()和Java.time.ZonedDateTime.nnow()将为当前日期/时间提供表示2。

在Java8之前,大多数了解这些事情的人都推荐Joda time拥有(迄今为止)最好的JavaAPI来完成涉及时间点和持续时间计算的事情。

对于Java 8和更高版本,建议使用标准Java.time包。Joda时间现在被认为是“过时的”,Joda维护人员建议人们迁移。


1-System.currentTimeMillis()提供“系统”时间。虽然通常将系统时钟设置为(标称)UTC,但本地UTC时钟和真实UTC之间会存在差异(增量)。增量的大小取决于系统时钟与UTC同步的程度(以及频率)。2-请注意,LocalDateTime不包括时区。正如javadoc所说:“如果没有偏移量或时区等附加信息,它就不能表示时间线上的某个时刻。”注意:如果不迁移,Java8代码不会损坏,但Joda代码库最终可能会停止获取错误修复和其他补丁。截至2020-02年,Joda的官方“生命终结”尚未宣布,Joda API也未被标记为已弃用。

看看Date课程。还有一个更新的Calendar类,它是执行许多日期/时间操作的首选方法(许多date方法已被弃用)

如果您只想要当前日期,那么创建一个新的date对象或调用Calendar.getInstance();。