标签:传统 操作 sim 输出时间 amount 当前时间 静态 取出 多少
@
Java 原本提供了 Date 和 Calendar 用于处理日期、时间的类,包括创建日期 、 时间对象,获取系统当前日期、时间等操作 。 但 Date 不仅无法实现国际化 ,而且它对不同属性也使用了前后矛盾的偏移量 ,比如月份与小时都是从 0 开始的,月份中的天数则是从 1 开始的,年又是从 1900 开始的,而java.util.Calendar 则显得过于复杂 ,从下面介绍中会看到传统 Java 对日期、时间处理的不足 。 Java 8 吸取了 Joda-Time 库( 一个被广泛使用的日期、 时间库)的经验 , 提供了一套全新的日期时间库 。
在计算机中只需要存储一个整数表示某一时刻。当需要显示为某一地区的当地时间时,就把它格式化为一个字符串
下面程序示范了 Date 类的用法 :
public class DateTest
{
public static void main(String[] args)
{
Date d1 = new Date();
// 获取当前时间之后100ms的时间
Date d2 = new Date(System.currentTimeMillis() + 100);
System.out.println(d2);
System.out.println(d1.compareTo(d2));
System.out.println(d1.before(d2));
//自定义输出时间日期
// 获取当前时间:
Date d3 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d3));
}
}
Date对象有几个严重的问题:它不能转换时区,除了toGMTString()可以按GMT+0:00输出外,Date总是以当前计算机系统的默认时区为基础进行输出。此外,我们也很难对日期和时间进行加减,计算两个日期相差多少天,计算某个月第一个星期一的日期等。
API:java.util.Date
因为 Date 类在设计上存在一些缺陷,所以 Java 提供了 Calendar 类来更好地处理日期和时间 。
Calendar 类本身是一个抽象类,它是所有日历类的模板,并提供了一些所有日历通用的方法 。
它本身不能直接实例化,程序只能创建 Calendar 子类的实例, Java 本身提供了 一个 GregorianCalendar 类,一个代表格里高利日历的子类,它代表了通常所说的公历 。
当然,也可以创建自己的 Calendar 子类,然后将它作为 Calendar 对象使用。
Calendar 类是一个抽象类,所以不能使用构造器来创建 Calendar 对象 。 但它提供了几个静态getInstance()方法来获取 Calendar 对象。
Calendar 与 Date 都是表示日期的工具类,它们 直接可以自由转换,如下代码所示 :
// 创建一个默认的 Calendar 对象
Calendar calendar = Calendar.getlnstance();
// 从 Calendar 对象中取出 Date 对象
Date date = calendar .getTime();
// 通过 Date 对象获得对应的 Calendar 对象
// 因为 Calendar / GregorianCalendar 没有构造函数可以接收 Date 对象
// 所以必须先获得一个 C alendar 实例,然后调用其 setTime () 方法
Calendar calendar2 = Calendar . getInstance();
calendar2.setTime(date);
Calendar 类提供了大量访问、修改日期时间的方法,常用 方法如下 。
上面的很多方法都需要一个 int 类型的 field 参数, field 是 Calendar 类的类变量 :
类变量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意义完全相同 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几 |
public class CalendarTest
{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();
// 取出年
System.out.println(c.get(YEAR));
// 取出月份
System.out.println(c.get(MONTH));
// 取出日
System.out.println(c.get(DATE));
// 分别设置年、月、日、小时、分钟、秒
c.set(2003 , 10 , 23 , 12, 32, 23); //2003-11-23 12:32:23
System.out.println(c.getTime());
// 将Calendar的年前推1年
c.add(YEAR , -1); //2002-11-23 12:32:23
System.out.println(c.getTime());
// 将Calendar的月前推8个月
c.roll(MONTH , -8); //2002-03-23 12:32:23
System.out.println(c.getTime());
Calendar cal1 = Calendar.getInstance();
cal1.set(2003, 7, 23, 0, 0 , 0); // 2003-8-23
cal1.add(MONTH, 6); //2003-8-23 => 2004-2-23
System.out.println(cal1.getTime());
Calendar cal2 = Calendar.getInstance();
cal2.set(2003, 7, 31, 0, 0 , 0); // 2003-8-31
// 因为进位到后月份改为2月,2月没有31日,自动变成29日
cal2.add(MONTH, 6); // 2003-8-31 => 2004-2-29
System.out.println(cal2.getTime());
Calendar cal3 = Calendar.getInstance();
cal3.set(2003, 7, 23, 0, 0 , 0); //2003-8-23
// MONTH字段“进位”,但YEAR字段并不增加
cal3.roll(MONTH, 6); //2003-8-23 => 2003-2-23
System.out.println(cal3.getTime());
Calendar cal4 = Calendar.getInstance();
cal4.set(2003, 7, 31, 0, 0 , 0); //2003-8-31
// MONTH字段“进位”后变成2,2月没有31日,
// YEAR字段不会改变,2003年2月只有28天
cal4.roll(MONTH, 6); //2003-8-31 => 2003-2-28
System.out.println(cal4.getTime());
}
}
Java 8 开始专 门新增了 一个 java.time 包, 该包下包含了 如下常用的类 :
public class NewDatePackageTest
{
public static void main(String[] args)
{
// -----下面是关于Clock的用法-----
// 获取当前Clock
Clock clock = Clock.systemUTC();
// 通过Clock获取当前时刻
System.out.println("当前时刻为:" + clock.instant());
// 获取clock对应的毫秒数,与System.currentTimeMillis()输出相同
System.out.println(clock.millis());
System.out.println(System.currentTimeMillis());
// -----下面是关于Duration的用法-----
Duration d = Duration.ofSeconds(6000);
System.out.println("6000秒相当于" + d.toMinutes() + "分");
System.out.println("6000秒相当于" + d.toHours() + "小时");
System.out.println("6000秒相当于" + d.toDays() + "天");
// 在clock基础上增加6000秒,返回新的Clock
Clock clock2 = Clock.offset(clock, d);
// 可看到clock2与clock1相差1小时40分
System.out.println("当前时刻加6000秒为:" +clock2.instant());
// -----下面是关于Instant的用法-----
// 获取当前时间
Instant instant = Instant.now();
System.out.println(instant);
// instant添加6000秒(即100分钟),返回新的Instant
Instant instant2 = instant.plusSeconds(6000);
System.out.println(instant2);
// 根据字符串中解析Instant对象
Instant instant3 = Instant.parse("2014-02-23T10:12:35.342Z");
System.out.println(instant3);
// 在instant3的基础上添加5小时4分钟
Instant instant4 = instant3.plus(Duration
.ofHours(5).plusMinutes(4));
System.out.println(instant4);
// 获取instant4的5天以前的时刻
Instant instant5 = instant4.minus(Duration.ofDays(5));
System.out.println(instant5);
// -----下面是关于LocalDate的用法-----
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
// 获得2014年的第146天
localDate = LocalDate.ofYearDay(2014, 146);
System.out.println(localDate); // 2014-05-26
// 设置为2014年5月21日
localDate = LocalDate.of(2014, Month.MAY, 21);
System.out.println(localDate); // 2014-05-21
// -----下面是关于LocalTime的用法-----
// 获取当前时间
LocalTime localTime = LocalTime.now();
// 设置为22点33分
localTime = LocalTime.of(22, 33);
System.out.println(localTime); // 22:33
// 返回一天中的第5503秒
localTime = LocalTime.ofSecondOfDay(5503);
System.out.println(localTime); // 01:31:43
// -----下面是关于localDateTime的用法-----
// 获取当前日期、时间
LocalDateTime localDateTime = LocalDateTime.now();
// 当前日期、时间加上25小时3分钟
LocalDateTime future = localDateTime.plusHours(25).plusMinutes(3);
System.out.println("当前日期、时间的25小时3分之后:" + future);
// 下面是关于Year、YearMonth、MonthDay的用法示例-----
Year year = Year.now(); // 获取当前的年份
System.out.println("当前年份:" + year); // 输出当前年份
year = year.plusYears(5); // 当前年份再加5年
System.out.println("当前年份再过5年:" + year);
// 根据指定月份获取YearMonth
YearMonth ym = year.atMonth(10);
System.out.println("year年10月:" + ym); // 输出XXXX-10,XXXX代表当前年份
// 当前年月再加5年,减3个月
ym = ym.plusYears(5).minusMonths(3);
System.out.println("year年10月再加5年、减3个月:" + ym);
MonthDay md = MonthDay.now();
System.out.println("当前月日:" + md); // 输出--XX-XX,代表几月几日
// 设置为5月23日
MonthDay md2 = md.with(Month.MAY).withDayOfMonth(23);
System.out.println("5月23日为:" + md2); // 输出--05-23
}
}
API:java.time
参考:
【1】:《疯狂Java讲义》
【2】:Date和Calendar
【3】:Java 日期时间
【4】:LocalDateTime详解
【5】:ZonedDateTime详解
【6】:DateTimeFormatter详解
【7】:Java日期时间新旧API转换、在数据库中存储日期和时间
Java Review (二十一、基础类库----日期、时间类)
标签:传统 操作 sim 输出时间 amount 当前时间 静态 取出 多少
原文地址:https://www.cnblogs.com/three-fighter/p/13052897.html