常用方法 读取 Excel的单位格 为 日期格式 的数据

Posted guxingy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用方法 读取 Excel的单位格 为 日期格式 的数据相关的知识,希望对你有一定的参考价值。

原文:地址忘了 百度应该有

 

Excel的单元格为日期格式,数值型日期,可用下面这个方法得到正常的数据

 

     /// <summary>
        /// 数字格式的时间 转换为 字符串格式的时间
        /// 数字格式的时间 如: 42095.7069444444/0.650694444444444
        /// </summary>
        /// <param name="timeStr">数字,如:42095.7069444444/0.650694444444444</param>
        /// <returns>日期/时间格式</returns>
        public string ToDateTimeValue(string strNumber)
        
            if (!string.IsNullOrWhiteSpace(strNumber))
            
                Decimal tempValue;
                //先检查 是不是数字;
                if (Decimal.TryParse(strNumber, out tempValue))
                
                    //天数,取整
                    int day = Convert.ToInt32(Math.Truncate(tempValue));
                    //这里也不知道为什么. 如果是小于32,则减1,否则减2
                    //日期从1900-01-01开始累加 
                    // day = day < 32 ? day - 1 : day - 2;
                    DateTime dt = new DateTime(1900, 1, 1).AddDays(day < 32 ? (day - 1) : (day - 2));

                    //小时:减掉天数,这个数字转换小时:(* 24) 
                    Decimal hourTemp = (tempValue - day) * 24;//获取小时数
                                                              //取整.小时数
                    int hour = Convert.ToInt32(Math.Truncate(hourTemp));
                    //分钟:减掉小时,( * 60)
                    //这里舍入,否则取值会有1分钟误差.
                    Decimal minuteTemp = Math.Round((hourTemp - hour) * 60, 2);//获取分钟数
                    int minute = Convert.ToInt32(Math.Truncate(minuteTemp));
                    //秒:减掉分钟,( * 60)
                    //这里舍入,否则取值会有1秒误差.
                    Decimal secondTemp = Math.Round((minuteTemp - minute) * 60, 2);//获取秒数
                    int second = Convert.ToInt32(Math.Truncate(secondTemp));

                    //时间格式:00:00:00
                    string resultTimes = string.Format("0:1:2",
                            (hour < 10 ? ("0" + hour) : hour.ToString()),
                            (minute < 10 ? ("0" + minute) : minute.ToString()),
                            (second < 10 ? ("0" + second) : second.ToString()));

                    if (day > 0)
                        return string.Format("0 1", dt.ToString("yyyy-MM-dd"), resultTimes);
                    else
                        return resultTimes;
                
            
            return string.Empty;
        

 

以上是关于常用方法 读取 Excel的单位格 为 日期格式 的数据的主要内容,如果未能解决你的问题,请参考以下文章

C# 读取Excel日期格式

如何使用 PHPExcel 库读取 excel 一个单元格日期(DD/MM/YYYY)值并将日期格式转换为(M/D/YYYY)

java导入excel时处理日期格式(已验证ok)

如何使用POI处理Excel中的日期数据类型

poi读取Excel时,如果单元格设置的是数字格式,如何解决整数与小数问题

XLSX.js读取excel日期格式时 将数字转换为正常日期格式