java 凌晨_Java中的日期类使用

日期时间API

计算世界时间的标准主要有:

UTC

GMT

CST

System静态方法

System类提供的 public static long currentTimeMillis() 用来返回当前时间与 1970年1月1日0时0分0秒 之间以毫秒为单位的时间差。

long l = System.currentTimeMillis();

System.out.println(l);

Date类

java.util.Date类:

import java.util.Date;

public class Main {

public static void main(String[] args) {

Date date = new Date(); // 创建了对应当前时间的Date对象

System.out.println(date.toString());// Thu Jan 14 18:10:32 CST 2021

System.out.println(date.getTime()); // 返回毫秒数

Date date1 = new Date(2001, 8, 19);// 创建指定年月日的Date对象

System.out.println(date1.toString());

Date date2 = new Date(1610619181448L);// 创建指定秒数的Date对象

System.out.println(date2.toString());

}

}

java.sql.Date类:

是对应数据库中的时间,为了专门匹配数据库中的。

import java.sql.Date;

public class Main {

public static void main(String[] args) {

Date date = new Date(1231231231L); // 创建了一个sql的Date对象

System.out.println(date);// 1970-01-15

// 父类对象不能强转换为子类对象,反之可以

}

}

Calendar类

位于:java.util.Calendar

Calendar 是一个抽象基类,主用用于完成日期字段之间相互操作的功能。

获取 Calendar 实例方法

使用 Calendar.getInstance() 方法

调用它的子类 GregorianCalendar 的构造器

一个 Calendar 的实例是系统时间的抽象表示,通过get(int field) 方法来取得想要得时间信息。比如 YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND

API功能get(int filed)返回指定的属性值

set(int filed, int change )将指定的属性设置为新的值

add(int filed, int ad)在当前指定属性原来的值上加上指定的数

getTime()返回一个Date对象

setTime(Date date)将Calendar改为Date的时间

注意:

获取月份时:一月是从 0 开始的,后面的月份一次类推

获取星期:周日是 1,周一是 2, 。。。。 周六是 7

代码测试

import java.text.ParseException;

import java.util.Calendar;

import java.util.Date;

public class Main {

public static void main(String[] args) {

// 实例化

// 方式1: 创建其子类 (GregorianCalendar)的对象

// 方式2: 调用它的静态方法getInstance()

Calendar calendar = Calendar.getInstance();

// System.out.println(calendar.getClass());

//常用方法

// get()

int days = calendar.get(Calendar.DAY_OF_MONTH); // 当前日期是这个月的第几天

System.out.println(days);

System.out.println(calendar.get(Calendar.DAY_OF_YEAR));// 当前日期是这一年的第几天

// set()

calendar.set(Calendar.DAY_OF_MONTH, 22);

days = calendar.get(Calendar.DAY_OF_MONTH);

System.out.println(days);

// add()

calendar.add(Calendar.DAY_OF_MONTH, 3);

System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

// getTime()

Date date = calendar.getTime();

System.out.println(date);

// setTime()

Date date1 = new Date();

calendar.setTime(date1);

System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

}

}

SimpleDateFormat类

位于 java.text.SimpleDateFormat

它允许进行 格式化: 日期 -> 文本、**解析:**文本 -> 日期

格式化:

SimpleDateFormat(): 默认的模式和语言环境创建对象

public SimpleDateFormat(String pattern): 该构造方法可以用参数 pattern 指定的格式创建一个对象,该对象调用

public String format(Date date): 方法格式化时间对象date

解析:

public Date parse(String source): 给定字符串的开始解析文本,以生成一个日期。

测试默认的构造器,创建的对象

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat();

// 格式化:Date格式化为字符串

Date date = new Date();

System.out.println(date);

String format = sdf.format(date);

System.out.println(format);

// 解析: 格式化的逆过程

String str = "2021/1/17 下午6:41";

try {

Date date1 = sdf.parse(str);

System.out.println(date1);

} catch (ParseException e) {

e.printStackTrace();

}

}

}

输出

Sun Jan 17 18:41:49 CST 2021

2021/1/17 下午6:41

Sun Jan 17 18:41:00 CST 2021

使用带参数的构造器

bff61d4dc7a0b535d6826c5ee7793b50.png

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Main {

public static void main(String[] args) throws ParseException {

// 带参数的构造函数,中传入的希望格式化的样式

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

// 格式化

String s = sdf.format(new Date());

System.out.println(s);

// 解析

Date date = sdf.parse("2021-01-17 06:47:18");

System.out.println(date);

}

}

输出:

2021-01-17 06:49:36

Sun Jan 17 06:47:18 CST 2021

练习

将 “2020-09-08” 转换为 java.sql.Date.

先将字符串,转换成Date类

通过SimpleDateForm类的解析方法

将Date类转换成sql.Date

通过sql.Date带参数的构造器,用Date的getTime方法传入参数

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Main {

// 练习:将2020-09-08转换为sql.Date

public static void main(String[] args) throws ParseException {

testExer();

}

public static void testExer() throws ParseException {

String birth = "2020-09-08";

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Date date = sdf.parse(birth);

// 将Date 转换成 sql.Date, 同步构造器传入秒。

java.sql.Date birthDate = new java.sql.Date(date.getTime());

System.out.println(birthDate.toString());

}

}

LocalDate类、LocalTime类、LocalDateTime类

方法描述now()静态方法,根据当前的时间创建对象/指定时区的对象

of()静态方法。根据指定日期/时间创建对象

getDayOfMonth()/getDayOfYear()获得月份天数(1-31)/ 获得年份天数(1-366)

getDayOfWeek()获得星期几(返回一个DayOfWeek 枚举值)

getMonth()获得月份、返回一个Month枚举值

getMonthValue()/getYear()获得月份(1-12)/获得年份

getHour()/getMinute()/getSecond()获得当前对象对应的小时、分钟、秒

withDayOfMonth()/withDayOfYear()/withMonth()/withYear()将月份天数、年份天数、月份、年份修改为指定的值并返回新对象

plusDays(),pulsWeeks(),plusMonths(),plusYears(),plusHours()向当前对象添加几天,几周,几个月,几年,几小时

minusMonths(), minusWeeks(),minusDays(),minusYears(),minusHours()从当前对象减去几月,几周,几天几年,几个小时

import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.LocalTime;

public class Main {

public static void main(String[] args) {

// LocalDate

LocalDate localDate = LocalDate.now(); // 获取当前系统时间

System.out.println(localDate);

// LocalTime

LocalTime localTime = LocalTime.now(); // 获取当前系统时间

System.out.println(localTime);

// LocalDateTime

LocalDateTime localDateTime = LocalDateTime.now();// 获取当前系统时间

System.out.println(localDateTime);

// of()

LocalDateTime localDateTime1 = LocalDateTime.of(2021, 1, 17, 20, 0, 0);

System.out.println(localDateTime1);

// getXXX()

System.out.println(localDateTime.getDayOfMonth());

System.out.println(localDateTime.getDayOfWeek());

System.out.println(localDateTime.getMonth());

System.out.println(localDateTime.getMonthValue());

System.out.println(localDateTime.getMinute());

// 体现不可变性

LocalDate localDate1 = localDate.withDayOfMonth(22);

System.out.println(localDate);

System.out.println(localDate1);

}

}

Instant类

用来记录某个时间点,以秒为单位

方法描述now()静态方法,返回默认UTC时区的Instant类的对象

ofEpochMilli(long epochMilli)静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象

atOffset(ZoneOffse offset)结合即时的偏移量来创建一个 OffsetDate Time

toEpochMilli()返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳 import java.time.*;

public class Main {

public static void main(String[] args) {

// now(): 获取本初子午线对应的标准时间

Instant instant = Instant.now();

System.out.println(instant);

// 添加时间偏移量

OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));

System.out.println(offsetDateTime);

// 获取距离 1970-01-01 00:00:00 到现在的毫秒数

long l = instant.toEpochMilli();

System.out.println(l);

// 通过给定的毫秒数,计算Instant实例

Instant instant1 = Instant.ofEpochMilli(1610885932356L);

System.out.println(instant1);

}

}

输出

2021-01-17T12:19:55.217502900Z

2021-01-17T20:19:55.217502900+08:00

1610885995217

2021-01-17T12:18:52.356Z

DateTimeFormatter类

位于 java.time.format.DateTime.Formatter类:该类提供了三种格式化方法

预定义格式标准。如:

ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME

本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)

自定义的格式化。如:ofPattern(“yyyy-MM-dd hh:mm:ss E”)

方法描述ofPattern(String pattern)静态方法,返回一个指定字符串格式DateTimeFormatter

format(TemporalAccessor t)格式化一个日期、时间。返回字符串

parse(CharSequence text)将指定格式的字符序列解析为一个日期、时间 import java.time.*;

import java.time.format.DateTimeFormatter;

import java.time.format.FormatStyle;

import java.time.temporal.TemporalAccessor;

public class Main {

public static void main(String[] args) {

// 实例化

// 1

DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

// 格式化:把日期改为字符串

LocalDateTime localDateTime = LocalDateTime.now();

String s = formatter.format(localDateTime);

System.out.println(localDateTime);

System.out.println(s);

// 解析:字符串到日期

TemporalAccessor parse = formatter.parse("2021-01-17T20:31:10.7686176");

System.out.println(parse);

// 2

DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);

//格式化

String s1 = formatter1.format(localDateTime);

System.out.println(s1);

DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);

String s2 = formatter2.format(LocalDateTime.now());

System.out.println(s2);

// 3

DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

// 格式化

String s3 = formatter3.format(LocalDateTime.now());

System.out.println(s3);

}

}

输出 2021-01-17T20:38:09.291183500

2021-01-17T20:38:09.2911835

{},ISO resolved to 2021-01-17T20:31:10.768617600

2021/1/17 下午8:38

2021年1月17日星期日

2021-01-17 08:38:09

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用SimpleDateFormat类的setTimeZone()方法来设置日期的时分秒为0,例如:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");sdf.setTimeZone(TimeZone.getTimeZone("UTC")); ### 回答2: 在Java,可以使用`java.util.Calendar`类来操作日期和时间。要将日期的时、分、秒变成0,可以按照以下步骤进行: 1. 创建一个`java.util.Calendar`对象。可以通过`Calendar.getInstance()`方法获取当前系统时间的Calendar对象。 2. 调用`Calendar`对象的`set`方法设置需要变为0的时、分、秒为0。例如,可以使用`calendar.set(Calendar.HOUR_OF_DAY, 0)`将小时设置为0,`calendar.set(Calendar.MINUTE, 0)`将分钟设置为0,`calendar.set(Calendar.SECOND, 0)`将秒设置为0。 3. 如果需要将毫秒也设置为0,可以使用`calendar.set(Calendar.MILLISECOND, 0)`将毫秒设置为0。 4. 如果需要将日期也设置为0,可以使用`calendar.set(Calendar.DAY_OF_MONTH, 1)`将日期设置为1。 5. 若要获取修改后的日期,可以使用`calendar.getTime()`方法。 下面是一个示例代码: ```java import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 设置时、分、秒为0 calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); // 设置毫秒为0 calendar.set(Calendar.MILLISECOND, 0); // 设置日期为1 calendar.set(Calendar.DAY_OF_MONTH, 1); // 获取修改后的日期 System.out.println(calendar.getTime()); } } ``` 运行此代码,将会输出修改后日期为指定时间的凌晨0点。 ### 回答3: 在Java将日期的时分秒变为0,可以使用以下方法: 1. 使用 java.util.Calendar 类来设置时分秒为0: ```java Calendar calendar = Calendar.getInstance(); calendar.setTime(date); // 将日期对象设置给Calendar实例 calendar.set(Calendar.HOUR_OF_DAY, 0); // 设置时为0 calendar.set(Calendar.MINUTE, 0); // 设置分为0 calendar.set(Calendar.SECOND, 0); // 设置秒为0 Date resultDate = calendar.getTime(); // 获取处理后的日期对象 ``` 2. 使用 java.util.Date 类的 setHours(), setMinutes() 和 setSeconds() 方法: ```java Date newDate = new Date(); newDate.setHours(0); // 设置时为0 newDate.setMinutes(0); // 设置分为0 newDate.setSeconds(0); // 设置秒为0 ``` 3. 使用第三方库,比如 Joda-Time: ```java DateTime dateTime = new DateTime(date); // 使用日期对象创建DateTime实例 DateTime newDateTime = dateTime.withTimeAtStartOfDay(); // 将时分秒设置为0 Date resultDate = newDateTime.toDate(); // 将DateTime转换为Date对象 ``` 以上方法可以根据你的需求选择相应的方式来将日期的时分秒部分设置为0。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值