datetime java获取当前时间 - 如何在Java中获取当前日期/时间





java获取周数 java获取第几周 (20)


只需创建一个Date对象...

Date date = new Date();

获取当前日期/时间的最佳方式是什么?







使用:

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

print语句将打印它被调用的时间,而不是在创建SimpleDateFormat时。 所以它可以被重复调用而不会创建任何新的对象。




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,只需创建一个新的Date()

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

对于java.util.Calendar,使用Calendar.getInstance()

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal)); //2016/11/16 12:08:43

对于java.time.LocalDateTime,使用LocalDateTime.now()

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now)); //2016/11/16 12:08:43

对于java.time.LocalDate,使用LocalDate.now()

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate localDate = LocalDate.now();
System.out.println(dtf.format(localDate)); //2016/11/16

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




我觉得这是最好的方法:

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



如前所述,基本的Date()可以根据获取当前时间来做你所需要的。 在我最近使用Java日期的经验中,内置类有许多古怪(以及许多Date类方法的弃用)。 突出的一个奇怪之处在于,从技术角度来看,几个月的指数是基于0的,但实际上可能非常混乱。

如果你只关心当前的日期应该就够了 - 但是如果你打算用日期进行大量的操作/计算,那么使用第三方库可能会非常有益(因为许多Java开发人员都不满意内置功能)。

我第二次提到斯蒂芬C的建议,因为我发现乔达时间对于简化我的日期工作非常有用,它也有很好的文档记录,你可以在整个网络中找到很多有用的例子。 我甚至最终编写了一个静态包装类(如DateUtils),用于整合和简化所有常见的日期操作。




看看Date类。 还有更新的Calendar类,它是进行多个日期/时间操作的首选方法(Date中的很多方法已被弃用)。

如果您只想要当前日期,则可以创建一个新的Date对象或调用Calendar.getInstance();




 System.out.println( new SimpleDateFormat("yyyy:MM:dd - hh:mm:ss a").format(Calendar.getInstance().getTime()) );
    //2018:02:10 - 05:04:20 PM

日期/时间与上午/下午




1st了解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以来的毫秒数。

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

2nd了解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/ : http://javau91.blogspot.com/




使用:

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

(它正在工作。)




    // 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() );



如果你想把当前的日期作为字符串,试试这个:

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

要么

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中它是:

LocalDateTime.now()

如果您需要时区信息:

ZonedDateTime.now()

如果你想打印花哨的格式化字符串:

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



TL;博士

Instant.now()                                         // Capture the current moment in UTC, with a resolution of nanoseconds.

… 要么 …

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone).

java.time

一些答案提到, java.time类是与最早版本的Java捆绑在一起的麻烦的旧遗留日期时间类的现代替代品。 以下是更多信息。

时区

其他答案没有解释时区在确定当前日期和时间中的重要性。 对于任何特定时刻,日期时间因地区而异。 例如,午夜过后的几分钟是法国巴黎的新的一天,而在魁北克蒙特利尔仍然是“昨天”。

Instant

作为最佳实践,您的大部分业务逻辑和数据存储/交换均应采用UTC进行。 要以UTC为单位以nanoseconds为单位获得当前时间,请使用Instant类。

Instant instant = Instant.now();

ZonedDateTime

您可以将该Instant调整为其他时区。 应用ZoneId对象以获取ZonedDateTime

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

我们可以跳过Instant并直接获取当前的ZonedDateTime

ZonedDateTime zdt = ZonedDateTime.now( z );

始终传递可选的时区参数。 如果省略,则应用JVM当前的默认时区。 即使运行期间 ,默认设置也可以随时更改。 不要让你的应用程序受到你的控制的外部性。 始终指定所需/预期的时区。

ZonedDateTime do_Not_Do_This = ZonedDateTime.now(); // BAD - Never rely implicitly on the current default time zone.

您可以稍后从ZonedDateTime提取Instant ZonedDateTime

Instant instant = zdt.toInstant();

当您需要时间轴上的实际时刻时,始终使用InstantZonedDateTime而不是LocalDateTimeLocal…类型故意没有时区的概念,因此它们仅代表可能时刻的粗略概念。 要获得实际的时刻,您必须指定一个时区以将Local…类型转换为ZonedDateTime ,从而使其具有意义。

LocalDate

LocalDate类表示没有时间和不带时区的仅限日期的值。

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );  // Always pass a time zone.

字符串

要生成表示日期时间值的String,只需在标准ISO 8601格式的java.time类上调用toString

String output = myLocalDate.toString();  // 2016-09-23

… 要么 …

String output = zdt.toString();  // 2016-09-23T12:34:56.789+03:00[America/Montreal]

ZonedDateTime类通过在方括号中明智地附加时区的名称来扩展标准格式。

对于其他格式,请在DateTimeFormatter类中搜索以获得许多问题和解答。

避免LocalDateTime

与RamanSB对问题的评论相反,你不应该在当前日期时间使用LocalDateTime类。

LocalDateTime故意缺少任何时区或偏离UTC时间的信息。 所以,当你追踪时间线上的特定时刻时,这是不合适的。 当然适合捕捉当前时刻。

“本地”的措辞是违反直觉的。 它意味着任何地方而不是任何一个特定的地方。 例如,今年圣诞节将于12月25日午夜开始: 2017-12-25T00:00:00 ,以LocalDateTime表示。 但这意味着在不同时间在全球各地的午夜。 午夜发生在Kiribati ,后来在新西兰,几个小时后在印度,等等,还有几个小时在圣诞节开始前在法国开始,当时加拿大的孩子们还在等待那天。 这些圣诞节开始点中的每一个将被表示为单独的ZonedDateTime

从您的系统外部

如果您不能相信系统时钟,请参阅Java:从服务器获取当前日期和时间,而不是系统时钟和我的答案 。

java.time.Clock

要利用当前备用供应商,请编写抽象java.time.Clock类的子类。

您可以将Clock实现作为参数传递给各种java.time方法。 例如, Instant.now( clock )

Instant instant = Instant.now( yourClockGoesHere ) ;

出于测试目的,请注意Clock自身可用的静态Clock的替代实现: LocalDateTimeoffsettick等。

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了诸如java.util.Datejava.util.CalendarSimpleDateFormat等麻烦的旧式legacy日期时间类。

现在处于维护模式Joda-time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 。 并搜索堆栈溢出了很多例子和解释。 规范是JSR 310

您可以直接与数据库交换java.time对象。 使用符合JDBC 4.2或更高版本的JDBC驱动程序 。 不需要字符串,不需要java.sql.*类。

何处获取java.time类?

  • Java SE 8Java SE 9和更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些次要功能和修复。
  • Java SE 6Java SE 7
  • Android
    • 后续版本的java.time类的Android捆绑实现。
    • 对于早期的Android, ThreeTenABP项目采用ThreeTen-Backport (上文提到)。 请参阅如何使用ThreeTenABP ...。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 您可以在这里找到一些有用的课程,如IntervalYearWeekYearQuarter等。




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




这取决于你想要什么样的日期/时间:

  • 如果您希望将日期/时间作为单个数字值,则System.currentTimeMillis()将为您提供该日期/时间,表示为UNIX纪元之后的毫秒数(以Java long )。 该值是UTC时间点的增量,并且与本地时区无关......假定系统时钟已正确设置。

  • 如果希望日期/时间的格式允许您以数字方式访问组件(年,月等),则可以使用以下方法之一:

    • new Date()为您提供一个用当前日期/时间初始化的Date对象。 问题是Date API方法大多是有缺陷的......并且已被弃用。

    • Calendar.getInstance()使用默认的LocaleTimeZone为您提供使用当前日期/时间初始化的Calendar对象。 其他重载允许您使用特定的Locale和/或时TimeZone 。 日历工作...但API仍然很麻烦。

    • new org.joda.time.DateTime()为您提供一个使用默认时区和年代表以当前日期/时间初始化的Joda-time对象。 还有很多其他的Joda替代品......在这里描述太多了。

    • 在Java 8中,调用LocalDateTime.now()ZonedDateTime.now()将为您提供当前日期/时间的表示。

在Java 8之前,大多数知道这些事情的人都建议Joda-time拥有(迄今为止)用于处理时间点和持续时间计算的最佳Java API。 对于Java 8,这不再是事实。 但是,如果您已经在您的代码库中使用了Joda时间,则没有强烈的理由需要迁移。

1 - 如果你不这样做,你的代码不会中断,你也不会得到弃用警告。 当然,Joda代码库可能会停止获取更新,但不太可能需要它们。 没有更新意味着稳定,这是一件好事。




我会继续前进,并将这个答案写入,因为当我有同样的问题时,这就是我所需要的:

Date currentDate = new Date(System.currentTimeMillis());

currentDate现在是Java Date对象中的当前日期。




你可以自己使用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文档,它已经被deprecated

Oracle文档:

Date类表示特定时刻,具有毫秒精度。

在JDK 1.1之前,Date类有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和秒钟值。 它还允许格式化和分析日期字符串。 不幸的是,这些功能的API不适合国际化。 从JDK 1.1开始,应使用Calendar类在日期和时间字段之间进行转换,并使用DateFormat类来格式化和分析日期字符串。 Date中的相应方法已弃用。

或者,您可以使用Calendar类,

Calendar.YEAR;
//and lot more

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

Calendar rightNow = Calendar.getInstance();

文档:

与其他语言环境敏感的类一样, Calendar提供了一个类方法getInstance ,用于获取此类型的通用对象。 日历的getInstance方法返回一个Calendar对象,其日历字段已用当前日期和时间初始化

以下代码仅用于获取日期

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

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

使用GregorianCalendar示例:

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

另请阅读:

。 现在最快乐的事情是(在java 8中),出于任何原因,没有人需要下载和使用库。 在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);

阅读Java 8日期好博客文章之一

并且要记住找出更多有关Java日期和时间的信息,因为有更多的方法和/或有用的方法可供您使用。

编辑:

根据@BasilBourque的评论,诸如java.util.Datejava.util.Calendarjava.text.SimpleTextFormat类的麻烦的旧日期时间类现在是legacy ,被java.time取代。




很简单

public class SomeClass{

    int number;
    String someString;

    public SomeClass(){
        number = 0;
    }

    public SomeClass(int number){
        this(); //set the class to 0
        this.setNumber(number); 
    }

    public SomeClass(int number, String someString){
        this(number); //call public SomeClass( int number )
    }

    public void setNumber(int number){
        this.number = number;
    }
    public void setString(String someString){
        this.someString = someString;
    }
    //.... add some accessors
}

现在这里有一些额外的小额信贷:

public SomeOtherClass extends SomeClass {
    public SomeOtherClass(int number, String someString){
         super(number, someString); //calls public SomeClass(int number, String someString)
    }
    //.... Some other code.
}

希望这可以帮助。





java datetime