import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
public class InstantTest {
public static void main(String[] args) {
long timeNow = System.currentTimeMillis();
System.out.println(timeNow);
/**
* java.util.Date
*/
Date date = new Date();
long currentTimeMillis = date.getTime();
Date date2 = new Date(System.currentTimeMillis());
//Fri Mar 16 20:53:25 CST 2018
System.out.println(date);
System.out.println(date.after(date2));
System.out.println(date.before(date2));
System.out.println(date.compareTo(date2));
// 2018-03-16T12:53:25.828Z
System.out.println(date.toInstant());
/**
* java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分,一般在读写数据库的时候用
* PreparedStatement的setDate()的参数和ResultSet的getDate()返回值的都是java.sql.Date
*
* java.sql.Date 是java.util.Date的派生类
*
* 对应了数据库的Date类型
*/
java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
// java.sql.Date只记录日期: 2018-03-16
System.out.println(sqlDate);
// 2018-03-16
System.out.println(sqlDate.toLocalDate());
/**
* java.sql.Timestamp 是java.util.Date的派生类
*
* java.sql.Date没有时间部分,而java.sql.Timestamp保留了时间部分
*
* 对应了数据库的timestamp类型
*/
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
// 2018-03-16 21:06:20.128
System.out.println(timestamp);
// 获取的时间是以毫微秒为单位的,1秒等于十亿毫微秒
System.out.println(timestamp.getNanos());
/**
* java.util.Calendar类适用于计算日期和时间
* 跟时区有关
*/
Calendar calendar = new GregorianCalendar();
System.out.println(calendar);
System.out.println(calendar.get(Calendar.YEAR));
// 在Calendar中MONTH这个域并不是从1到12的,而是从0表示一月,11表示十二月.
System.out.println(calendar.get(Calendar.MONTH));
// 星期是如你预料的一般从1到7的,但是星期天才是一周的第1天,星期一是第2天,依次类推.
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
// 获取时区
TimeZone timeZone = calendar.getTimeZone();
System.out.println(timeZone);
// 返回默认的时区,即系统当前时区
System.out.println(TimeZone.getDefault().getID());
/**
* Date 和 String
*
* java.text.SimpleDateFormat
*/
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateToString = simpleDateFormat.format(new Date());
System.out.println(dateToString);
try {
Date StringToDate = simpleDateFormat.parse("2018-03-16 21:35:17");
System.out.println(StringToDate);
} catch (ParseException e) {
e.printStackTrace();
}
/**
* JDK8
* java.time.Instant: 统计时间
*
* 和java.sql.Timestamp有点类似
*/
Instant now = Instant.now();
// 2018-03-16T13:41:19.583Z
System.out.println(now);
// 1521207679
System.out.println(now.getEpochSecond());
// 583000000
System.out.println(now.getNano());
Instant later = now.plusSeconds(3);
Instant earlier = now.minusSeconds(3);
// later: 1521207682,earlier: 1521207676
System.out.println("later: " + later.getEpochSecond() + "," + "earlier: " + earlier.getEpochSecond());
/**
* JDK8
* java.time.Duration: 表示两个Instant间的一段时间
*
* 一个Duration对象里有两个域:纳秒值(小于一秒的部分),秒钟值(一共有几秒)
*
*/
Instant first = Instant.now();
// wait some time while something happens
Instant second = Instant.now();
Duration duration = Duration.between(first, second);
// 转换整个时间
System.out.println(duration.toNanos());
// 获取纳秒值部分
System.out.println(duration.getNano());
// 获取秒钟值部分
System.out.println(duration.abs().getSeconds());
/**
* LocalDate类是Java 8中日期时间功能里表示一个本地日期的类,它的日期是无时区属性的。
* 可以用来表示生日、节假日期等等。这个类用于表示一个确切的日期,而不是这个日期所在的时间。
*
* 和java.util.Calendar进行比较
*/
LocalDate localDate = LocalDate.now();
LocalDate localDate2 = LocalDate.of(2015, 12, 31);
// 2018-03-16,2015-12-31
System.out.println(localDate + "," + localDate2);
int year = localDate.getYear();
// 返回枚举类型
Month month = localDate.getMonth();
int dayOfMonth = localDate.getDayOfMonth();
int dayOfYear = localDate.getDayOfYear();
DayOfWeek dayOfWeek = localDate.getDayOfWeek();
/**
* LocalTime类是Java 8中日期时间功能里表示一整天中某个时间点的类,它的时间是无时区属性的。
*/
LocalTime localTime = LocalTime.now();
LocalTime localTime2 = LocalTime.of(21, 30, 59, 11001);
// 22:00:48.771,21:30:59.000011001
System.out.println(localTime + "," + localTime2);
/**
* LocalDateTime类是Java 8中日期时间功能里,用于表示当地的日期与时间的类,它的值是无时区属性的。
* 可以将其视为Java 8中LocalDate与LocalTime两个类的结合。
*/
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = LocalDateTime.of(2015, 11, 26, 13, 55,
36, 123);
// 2015-11-26T13:55:36.000000123
System.out.println(localDateTime2);
/**
* ZonedDateTime类是Java 8中日期时间功能里,用于表示 带时区 的日期与时间信息的类。
* 可以用于表示一个真实事件的开始时间,如某火箭升空时间等等。
*/
ZonedDateTime zonedDateTime = ZonedDateTime.now();
// 时区是用ZoneId类表示的,你可以使用ZoneId.now()或ZoneId.of(“xxx”)来实例化
ZoneId zoneId = ZoneId.of("UTC+1");
ZonedDateTime zonedDateTime2 = ZonedDateTime.of(2015, 11, 30, 23, 45,
59, 1234, zoneId);
// 2015-11-30T23:45:59.000001234+01:00[UTC+01:00]
System.out.println(zonedDateTime2);
/**
* java.time.format.DateTimeFormatter
* DateTimeFormatter类是Java 8中日期时间功能里,用于解析和格式化日期时间的类,位于java.time.format包下.
* DateTimeFormatter类包含一系列预定义(常量)的实例,可以解析和格式化一些标准时间格式
*/
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
String formattedDate = formatter.format(LocalDate.now());
// 20180316
System.out.println(formattedDate);
// 20180316+0800
System.out.println(formatter.format(ZonedDateTime.now()));
}
}
Java中的时间与日期
最新推荐文章于 2024-11-15 17:22:38 发布