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


当前回答

Use:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd::HH:mm:ss");
System.out.println(sdf.format(System.currentTimeMillis()));

print语句将打印调用它的时间,而不是创建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/

我创建了这种方法,它对我很有用。。。

public String GetDay() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd")));
}

public String GetNameOfTheDay() {
    return String.valueOf(LocalDateTime.now().getDayOfWeek());
}

public String GetMonth() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM")));
}

public String GetNameOfTheMonth() {
    return String.valueOf(LocalDateTime.now().getMonth());
}

public String GetYear() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy")));
}

public boolean isLeapYear(long year) {
    return Year.isLeap(year);
}

public String GetDate() {
    return GetDay() + "/" + GetMonth() + "/" + GetYear();
}

public String Get12HHour() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("hh")));
}

public String Get24HHour() {
    return String.valueOf(LocalDateTime.now().getHour());
}

public String GetMinutes() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("mm")));
}

public String GetSeconds() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("ss")));
}

public String Get24HTime() {
    return Get24HHour() + ":" + GetMinutes();
}

public String Get24HFullTime() {
    return Get24HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}

public String Get12HTime() {
    return Get12HHour() + ":" + GetMinutes();
}

public String Get12HFullTime() {
    return Get12HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}
    // 2015/09/27 15:07:53
    System.out.println( new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().getTime()) );

    // 15:07:53
    System.out.println( new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()) );

    // 09/28/2015
    System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(Calendar.getInstance().getTime()));

    // 20150928_161823
    System.out.println( new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()) );

    // Mon Sep 28 16:24:28 CEST 2015
    System.out.println( Calendar.getInstance().getTime() );

    // Mon Sep 28 16:24:51 CEST 2015
    System.out.println( new Date(System.currentTimeMillis()) );

    // Mon Sep 28
    System.out.println( new Date().toString().substring(0, 10) );

    // 2015-09-28
    System.out.println( new java.sql.Date(System.currentTimeMillis()) );

    // 14:32:26
    Date d = new Date();
    System.out.println( (d.getTime() / 1000 / 60 / 60) % 24 + ":" + (d.getTime() / 1000 / 60) % 60 + ":" + (d.getTime() / 1000) % 60 );

    // 2015-09-28 17:12:35.584
    System.out.println( new Timestamp(System.currentTimeMillis()) );

    // Java 8

    // 2015-09-28T16:16:23.308+02:00[Europe/Belgrade]
    System.out.println( ZonedDateTime.now() );

    // Mon, 28 Sep 2015 16:16:23 +0200
    System.out.println( ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME) );

    // 2015-09-28
    System.out.println( LocalDate.now(ZoneId.of("Europe/Paris")) ); // rest zones id in ZoneId class

    // 16
    System.out.println( LocalTime.now().getHour() );

    // 2015-09-28T16:16:23.315
    System.out.println( LocalDateTime.now() );

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

如果您希望日期/时间是一个单一的数值,那么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也未被标记为已弃用。

Java 8或更高版本

LocalDateTime.now() and ZonedDateTime.now()