C#,Asp.NET 导入Excel,时间格式一串数字转换.

在Excel中.日期或者时间格式为:42093.6506944444 或者 0.650694444444444

大于0 表示有日期(2015-03-30),小于零则是时间(15:37)

在C# 导入读取这列时,转换会发生错误;

现在将这格式转换为正常的日期格式:如下:

/// <summary>
    /// 数字转换时间格式
    /// </summary>
    /// <param name="timeStr">数字,如:42095.7069444444/0.650694444444444</param>
    /// <returns>日期/时间格式</returns>
    private 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;
    }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值