java时间

java时间

Java表示时间主要使用的有三个类:

  1. Datejava.util.Date,主要用时间戳表示时间
  2. SimpleDateFormat :日期格式化类
  3. Calendar:日期抽象类

Date

其一个对象表示一个时间戳,没有时区概念,都是从1970-1-1 00:00:00 +0:00开始的毫秒数

构造方法

有两个构造方法:

  1. Date()

    使用当前时间戳来初始化对象

  2. Date(long millisec)

    接收一个参数,该参数是从1970-1-1 00:00:00 +0:00起的毫秒数。

例如:

Date date1 = new Date();
System.out.println(date1);// Sun Jul 26 15:21:47 CST 2020

Date date2 = new Date(0);
System.out.println(date2);// Thu Jan 01 08:00:00 CST 1970

其中的CST表示时区,可以表示四个时区(有歧义):

  1. 中国标准时间:China Standard Time UT+8:00
  2. 美国中部时间:Central Standard Time (USA) UT-6:00
  3. 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
  4. 古巴标准时间:Cuba Standard Time UT-4:00

这里由于我在中国,所以CST表示的是中国标准时间,也就是北京时间

因为北京时间比格林威治标准时(GMT)快八小时,所以时间戳0是从Thu Jan 01 08:00:00 CST 1970开始

常用方法

  1. long getTime():获取时间戳(毫秒级)
  2. void setTime(long time):用time时间戳(毫秒级)设置对象的时间
  3. boolean after(Date date):若当调用此方法的Date对象在指定日期date之后返回true,否则返回false。
  4. boolean before(Date date):若当调用此方法的Date对象在指定日期date之前返回true,否则返回false。
  5. int compareTo(Date date):比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
  6. Object clone():返回此对象的副本。

SimpleDateFormat

由于时间戳表示时间非常不直观,可读性差,所以就出现了SimpleDateFormat来格式化时间

构造方法

常用有3个:

  1. SimpleDateFormat():根据当地的时间习惯设置格式
  2. SimpleDateFormat(String pattern)pattern指定时间格式,最常用
  3. SimpleDateFormat(String pattern, Locale locale)pattern指定时间格式,Locale设置地区

例如

Date date = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);

System.out.println(sdf1.format(date));// 20-7-26 下午4:11
System.out.println(sdf2.format(date));// 2020-07-26 16:11:27
System.out.println(sdf3.format(date));// 2020-07-26 16:11:27

常用方法

  1. String format(Date date):将date格式化为指定格式

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date = new Date();
    System.out.println(sdf.format(date));// 2020-07-26
    
  2. Date parse(String source):将时间字符串source根据指定格式,解析成Date对象

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date = sdf.parse("2020-01-02");
    System.out.println(date);// Thu Jan 02 00:00:00 CST 2020
    
  3. void setTimeZone(TimeZone zone):设定时区

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 设置时区为GMT+00:00
    sdf.setTimeZone(TimeZone.getTimeZone("GMT+0"));
    // 按GMT时区,解析时间2020-01-02 00:00:00
    Date date = sdf.parse("2020-01-02 00:00:00");
    System.out.println(date);// Thu Jan 02 08:00:00 CST 2020
    

    注意:输出的时间Thu Jan 02 08:00:00 CST 20202020-01-02 00:00:00快了八小时,是因为sdf的时区是GMT,所以当解析2020-01-02 00:00:00时,会按GMT的标准转换成date时间戳。而我现在在中国,所以输出时会转换为北京时间。

格式化编码表

字母描述示例
G纪元标记AD
y四位年份2001
M月份July or 07
d一个月的日期10
hA.M./P.M. (1~12)格式小时12
H一天中的小时 (0~23)22
m分钟数30
s秒数55
S毫秒数234
E星期几Tuesday
D一年中的日子360
F一个月中第几周的周几2 (second Wed. in July)
w一年中第几周40
W一个月中第几周1
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
KA.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
文字定界符Delimiter
"单引号`

Calendar

Calendar类虽说是日历类,但它其实不只含有日期,还有时分秒,时区等信息,功能比Date强大

初始化

由于Calendar是一个抽象类,所以初始化时,需要调用其静态方法Calendar.getInstance()获取对象,默认是当前时间

Calendar.getInstance()返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar是Calendar的实现类

常用方法

  1. Date getTime():获取其对应的Date对象

  2. void set(int field, int value):设置某个字段field的值为value

    Calendar calendar = Calendar.getInstance();
    System.out.println(calendar.getTime());// Sun Jul 26 17:27:35 CST 2020
    calendar.set(Calendar.YEAR, 1999);
    System.out.println(calendar.getTime());// Mon Jul 26 17:27:35 CST 1999
    
  3. void set(int year, int month, int date):设置年份,月份,日期,这里的date,准确的说不是多少号,而是从这个月1号开始的第几天,第一天就是1号。month从0开始,所以最好使用Calendar的静态变量。类似的重载还有

    1. void set(int year, int month, int date, int hourOfDay, int minute)
    2. void set(int year, int month, int date, int hourOfDay, int minute, int second)
    Calendar calendar = Calendar.getInstance();
    calendar.set(1999, Calendar.DECEMBER,25);
    System.out.println(calendar.getTime());// Sat Dec 25 17:33:18 CST 1999
    
  4. void add(int field, int amount):给某个字段field加上amount

    Calendar calendar = Calendar.getInstance();
    calendar.set(1999, Calendar.DECEMBER,15);
    calendar.add(Calendar.DATE, 10);
    System.out.println(calendar.getTime());// Sat Dec 25 17:41:12 CST 1999
    
  5. int get(int field):获取某个字段field的值

    Calendar calendar = Calendar.getInstance();
    System.out.println(calendar.get(Calendar.YEAR));// 2020
    
  6. long getTimeInMillis():获取时间戳

常用字段

字段(省略Calendar.)描述
YEAR
MONTH
DATE
DAY_OF_MONTH几号,当月的第几天,同DATE
DAY_OF_WEEK星期几,1表示周日
DAY_OF_WEEK_IN_MONTH一个月的第几周,以该月1号的星期为一周的开头
DAY_OF_YEAR一年的第几天,
HOUR_OF_DAY时,24小时制
HOUR时,12小时制
MINUTE
SECOND
AM_PMAM或PM
MILLISECOND毫秒
WEEK_OF_MONTH一个月的第几周,以周日为一周的开头
WEEK_OF_YEAR一年的第几周

扩展

获取时间戳的方法

执行效率从高到低依次为

System.currentTimeMillis()
new Date().getTime()
Calendar.getInstance().getTimeInMillis()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,时间的转换可以使用Java标准库中的`java.time`包来实现。下面是一些示例代码,演示了如何在Java中进行时间的转换。 1. 时间戳转日期时间字符串 ```java import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; public class TimestampToDateTimeString { public static void main(String[] args) { long timestamp = 1622016000000L; // 时间戳,单位为毫秒 Instant instant = Instant.ofEpochMilli(timestamp); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String dateTimeString = localDateTime.format(formatter); System.out.println(dateTimeString); } } ``` 2. 日期时间字符串转时间戳 ```java import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; public class DateTimeStringToTimestamp { public static void main(String[] args) { String dateTimeString = "2021-05-26 12:00:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime localDateTime = LocalDateTime.parse(dateTimeString, formatter); long timestamp = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); System.out.println(timestamp); } } ``` 3. 日期时间字符串转Date对象 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateTimeStringToDate { public static void main(String[] args) throws ParseException { String dateTimeString = "2021-05-26 12:00:00"; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = formatter.parse(dateTimeString); System.out.println(date); } } ``` 4. Date对象转日期时间字符串 ```java import java.text.SimpleDateFormat; import java.util.Date; public class DateToDateTimeString { public static void main(String[] args) { Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateTimeString = formatter.format(date); System.out.println(dateTimeString); } } ``` 上述示例代码演示了一些常见的Java时间转换操作,您可以根据自己的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值