某一天的开始时间以及结束时间及标准日期与时间戳互转(10位)

日期时间转换技巧
本文详细介绍如何在编程中进行日期和时间戳之间的相互转换,包括标准日期转时间戳、时间戳转标准日期、获取当天的开始和结束时间的方法。通过具体代码示例,帮助读者掌握不同场景下的日期时间操作。

时间戳有秒级和毫秒级的,秒级(10位)的要除以1000,毫秒级的不需要;


不够2位,补0

fullT(s) {
			return s < 10 ? '0' + s : s
		},

标准日期转时间戳

startStamp($data){//某天开始日期转时间戳
			return (new Date(Date.parse($data.replace(/-/g, "/")))).getTime() / 1000;
		},
endStamp($data){//某天结束日期转时间戳
			return new Date().setTime(Date.parse($data.replace(/-/g, "/")) / 1000 + 24 * 60 * 60 - 1);
		}

时间戳转标准日期

	stampData($stamp){//时间戳转日期
			var time=new Date($stamp*1000);//要带时分秒的话,就要毫秒级的,
			var y = time.getFullYear();
			var m = time.getMonth()+1;
			var d = time.getDate();
			var h = time.getHours();
			var mm = time.getMinutes();
			var s = time.getSeconds();
			return y+'-'+m+'-'+d+' '+h+':'+mm+':'+s;
		},

当天的开始时间

	var st = new Date(
				new Date(new Date().toLocaleDateString()).getTime()
			);
	var d = new Date(st)
	var sTime = d.getFullYear() + '-' + this.fullT((d.getMonth() + 1)) + '-' + this.fullT(d.getDate());//转成标准格式:1970-10-10

当天的结束时间

// 当天结束时间
	var ed = new Date(
		new Date(new Date().toLocaleDateString()).getTime() +24 * 60 * 60 * 1000 -1
		);
	var sTime = ed .getFullYear() + '-' + this.fullT((ed .getMonth() + 1)) + '-' + this.fullT(ed .getDate());//转成标准格式:1970-10-10

Thu Mar 07 2019 12:00:00 GMT+0800 (中国标准时间)日期转换

Thu Mar 07 2019 12:00:00 GMT+0800 (中国标准时间)转成1970-10-10格式

		selUploadTime(t){//上传时间
			var d = new Date(t)
			var resDate = d.getFullYear() + '-' + this.fullT((d.getMonth() + 1)) + '-' + this.fullT(d.getDate());//年月日
			this.uploadTime=resDate;
// 			var resTime = this.fullT(d.getHours()) + ':' + this.fullT(d.getMinutes()) + ':' + this.fullT(d.getSeconds());//时分秒
		},
<think>我们参考用户提供的引用内容,特别是引用[2]中的方法,它展示了如何获取指定日期所在月份的开始结束时间戳。现在用户想要获取指定日期开始时间戳(即当天的00:00:00.000)结束时间戳(即当天的23:59:59.999)。 我们可以使用Calendar类来实现,步骤如下: 1. 将指定日期设置到Calendar实例中。 2. 对于开始时间:将小时、分钟、秒毫秒设置为0,然后获取时间戳。 3. 对于结束时间:将小时设置为23,分钟设置为59,秒设置为59,毫秒设置为999,然后获取时间戳。 注意:由于时间戳是自1970年1月1日UTC时间以来的毫秒数,所以这里我们设置的时分秒毫秒都是基于指定日期的时区(默认使用系统时区)。如果需要指定时区,可以在Calendar实例中设置时区。 另外,在Java 8及以上版本中,我们可以使用java.time包中的LocalDateTimeZonedDateTime类来更简洁地实现。 下面提供两种方法:传统Calendar方法Java 8的java.time方法。</think>### Java 获取指定日期开始时间戳结束时间戳 在 Java 中获取指定日期开始时间戳(00:00:00.000)结束时间戳(23:59:59.999)有两种常用方法: --- #### 方法 1:使用 `Calendar`(兼容 Java 7 及以下版本) ```java import java.util.Calendar; import java.util.Date; public class TimestampUtils { /** * 获取指定日期开始时间戳(00:00:00.000) * @param date 指定日期 * @return 开始时间戳(毫秒) */ public static long getDayStartTimestamp(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 0); // 小时设为0 cal.set(Calendar.MINUTE, 0); // 分钟设为0 cal.set(Calendar.SECOND, 0); // 秒设为0 cal.set(Calendar.MILLISECOND, 0); // 毫秒设为0 return cal.getTimeInMillis(); // 返回时间戳[^2] } /** * 获取指定日期结束时间戳(23:59:59.999) * @param date 指定日期 * @return 结束时间戳(毫秒) */ public static long getDayEndTimestamp(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 23); // 小时设为23 cal.set(Calendar.MINUTE, 59); // 分钟设为59 cal.set(Calendar.SECOND, 59); // 秒设为59 cal.set(Calendar.MILLISECOND, 999); // 毫秒设为999 return cal.getTimeInMillis(); // 返回时间戳[^2] } } ``` **使用示例**: ```java Date today = new Date(); // 当前日期 long start = TimestampUtils.getDayStartTimestamp(today); long end = TimestampUtils.getDayEndTimestamp(today); System.out.println("今日开始时间戳: " + start); // 例如:1685433600000 System.out.println("今日结束时间戳: " + end); // 例如:1685519999999 ``` --- #### 方法 2:使用 `java.time`(Java 8+ 推荐) ```java import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; public class TimestampUtilsModern { /** * 获取指定日期开始时间戳(00:00:00) * @param date 指定日期 * @return 开始时间戳(毫秒) */ public static long getDayStartTimestamp(LocalDate date) { return date.atStartOfDay(ZoneId.systemDefault()) .toInstant() .toEpochMilli(); // 换为毫秒时间戳[^3] } /** * 获取指定日期结束时间戳(23:59:59.999) * @param date 指定日期 * @return 结束时间戳(毫秒) */ public static long getDayEndTimestamp(LocalDate date) { return date.atTime(23, 59, 59, 999_000_000) // 纳秒精度 .atZone(ZoneId.systemDefault()) .toInstant() .toEpochMilli(); // 换为毫秒时间戳[^3] } } ``` **使用示例**: ```java LocalDate today = LocalDate.now(); // 当前日期 long start = TimestampUtilsModern.getDayStartTimestamp(today); long end = TimestampUtilsModern.getDayEndTimestamp(today); System.out.println("今日开始时间戳: " + start); System.out.println("今日结束时间戳: " + end); ``` --- ### 关键参数说明 | 参数 | 开始时间戳设置 | 结束时间戳设置 | |--------------|------------------------------|------------------------------| | **小时** | `0` (00:00) | `23` (23:00) | | **分钟** | `0` | `59` | | **秒** | `0` | `59` | | **毫秒** | `0` | `999` | | **时区处理** | 使用系统默认时区`ZoneId.systemDefault()` | 同左 | --- ### 注意事项 1. **时区影响** 所有方法默认使用系统时区,如需指定时区: ```java // Java 8+ 示例 ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai"); long start = date.atStartOfDay(shanghaiZone).toInstant().toEpochMilli(); ``` 2. **时间范围** 结束时间戳 `23:59:59.999` 是当天的最后一毫秒,比下一天开始时间戳少 1 毫秒: $$ \text{结束时间戳} = \text{下一天开始时间戳} - 1 $$ 3. **数据库应用** 数据库交互时,建议使用 `java.sql.Timestamp`: ```java Timestamp startTs = new Timestamp(getDayStartTimestamp(today)); ``` --- ### 常见问题解决 **Q:如何处理跨时区日期?** A:明确指定时区参数: ```java // 获取纽约时区的开始时间戳 ZoneId newYorkZone = ZoneId.of("America/New_York"); long nyStart = LocalDate.now().atStartOfDay(newYorkZone).toInstant().toEpochMilli(); ``` **Q:如何获取其他时间范围?** 参考类似逻辑修改: - **周范围**:使用 `Calendar.WEEK_OF_YEAR` 或 `LocalDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))`[^2] - **月范围**:参考引用[2]中的 `getMonthBegin()` `getMonthEnd()` 方法 - **年范围**:设置月份为 1 月 1 日 12 月 31 日
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值