如何将日期部分重置为当月首日并保留原有时间?
如何将日期时间重置为当月首日并保留时间?
当然能搞定这个需求!下面我针对几种常用的场景,给你具体的实现方案,你按需取用就行:
Python 实现
用Python的datetime模块就能轻松实现,思路很直接:解析日期字符串后,把「日」替换成1,再转回字符串格式。
from datetime import datetime def reset_to_month_first_day(dt_str): # 把字符串转成datetime对象 original_dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S") # 替换日为1,保留时分秒 month_start_dt = original_dt.replace(day=1) # 转回指定格式的字符串 return month_start_dt.strftime("%Y-%m-%d %H:%M:%S") # 测试你的示例 print(reset_to_month_first_day("2018-01-02 23:00:00")) # 输出: 2018-01-01 23:00:00 print(reset_to_month_first_day("2018-04-04 10:00:00")) # 输出: 2018-04-01 10:00:00
SQL 实现(以MySQL为例)
如果是在数据库里处理这类数据,可以通过拼接日期部分和时间部分来实现:
-- 假设你的日期时间字段名为`datetime_col`,表名为`your_table` SELECT CONCAT(DATE_FORMAT(datetime_col, '%Y-%m-01'), ' ', TIME(datetime_col)) AS month_start_datetime FROM your_table;
原理是:先用DATE_FORMAT提取年份和月份,拼接上-01得到当月首日的日期部分,再用TIME()提取原字段的时间部分,最后把两者拼接起来就是目标结果。
Excel 实现
要是用Excel处理,公式也很简单,有两种写法:
- 拆分日期和时间再组合:
=DATE(YEAR(A1), MONTH(A1), 1) + TIME(HOUR(A1), MINUTE(A1), SECOND(A1))
- 更简洁的写法(利用Excel日期的数值特性):
=EOMONTH(A1, -1) + 1 + MOD(A1, 1)
解释一下:EOMONTH(A1, -1)会得到上月最后一天,加1就是当月首日;MOD(A1,1)会提取出A1单元格里的时间部分(因为Excel中日期是整数,时间是小数),两者相加就得到了保留时间的当月首日日期。
如果你是用其他工具或编程语言,随时告诉我,我再给你补充对应的实现方法~
内容的提问来源于stack exchange,提问作者Gadziu
相关产品推荐
相关产品推荐

