在Java中获取当前日期/时间的最佳方法是什么?
当前回答
使用java 8的当前日期:首先,让我们使用java.time.LocalDate获取当前系统日期:
LocalDate localDate = LocalDate.now();
要获取任何其他时区的日期,我们可以使用LocalDate.now(ZoneId):
LocalDate localDate = LocalDate.now(ZoneId.of("GMT+02:30"));
我们还可以使用java.time.LocalDateTime获取LocalDate的实例:
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();
其他回答
你看过java.util.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文档,它已被弃用。
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类。
创建日期对象并将其打印下来。
Date d = new Date(System.currentTimeMillis());
System.out.print(d);
Use:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp );
(它起作用了。)
java.util.Date date = new java.util.Date();
它会在实例化时自动填充。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 解析日期字符串并更改格式
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder