C# - 将Timestamp转换为DateTime:指定格式转换需求
嘿,这个问题我熟!你提到的这个Timestamp其实是Excel的日期序列号——整数部分是从1900年1月1日开始累计的天数,小数部分则是当天时间占一整天的比例。要把它转换成yyyyMMddHHmmss格式,我给你几个常用场景的实现方案:
解决方案
Python实现
用Python的datetime模块就能轻松处理,代码里还特意修正了Excel的1900年闰年bug:
from datetime import datetime def excel_timestamp_to_str(timestamp): # Excel起始日期实际对应1899-12-30,修正闰年bug base_date = datetime(1899, 12, 30) target_datetime = base_date + datetime.timedelta(days=timestamp) return target_datetime.strftime("%Y%m%d%H%M%S") # 测试你的示例数据 test_timestamp = 43193.12920166 print(excel_timestamp_to_str(test_timestamp)) # 输出:20180403030603
VBA实现(Excel内直接使用)
如果是在Excel表格里批量处理,写个自定义函数最方便:
Function ConvertTimestamp(timestamp As Double) As String Dim targetDate As Date ' 修正Excel的1900闰年误差 targetDate = DateSerial(1900, 1, 1) + timestamp - 2 ConvertTimestamp = Format(targetDate, "yyyyMMddHHmmss") End Function
在Excel单元格里直接调用=ConvertTimestamp(43193.12920166)就能得到目标格式的字符串。
JavaScript实现
前端或Node.js环境下可以用这段代码:
function excelTimestampToStr(timestamp) { // 基于UTC时间修正Excel起始日期偏差 const baseDate = new Date(Date.UTC(1899, 11, 30)); const targetTime = baseDate.getTime() + timestamp * 24 * 60 * 60 * 1000; const targetDate = new Date(targetTime); // 补零工具函数,确保单个数字的月份、日期等格式正确 const padZero = num => num.toString().padStart(2, '0'); return `${targetDate.getUTCFullYear()}${padZero(targetDate.getUTCMonth() + 1)}${padZero(targetDate.getUTCDate())}${padZero(targetDate.getUTCHours())}${padZero(targetDate.getUTCMinutes())}${padZero(targetDate.getUTCSeconds())}`; } // 测试示例 console.log(excelTimestampToStr(43193.12920166)); // 输出:20180403030603
内容的提问来源于stack exchange,提问作者MG78
相关产品推荐
相关产品推荐

