2016-09-20 62 views
0

我有一个excel中的日期列,它们是01.02.2016格式的所有方式(并且可能在将来更改为01/02/2016)以及每行添加到数据表中我的背景工作者。C#日期时间异常错误

通过每个数据表行循环我抓住日期列,并尝试更改日期几次,以获得正确的sqlite格式保存到数据库。

见下文;

foreach datatablerow { 

    //change dots to slashes 
    string dateString = Convert.ToString(rowData["Date"]).ToString().Replace(".", "/"); 

    //do DateTime C# Formatting.. 
    //This is causing the crash/exception 
    DateTime _dateString = Convert.ToDateTime(dateString); 
    //also have used & crahses as well 
    //DateTime _dateString = DateTime.Parse(dateString); 

    //Change agian to suit sqlite database entry - 2016/02/01 
    string change_dateString = _dateString.ToString("yyyy-MM-dd"); 

    //Insert database data... 

} 

不过,我得到System.FormatException:字符串未被确认为交易环路(即使另一台计算机使用上面的代码相同的事务工作在一个有效的DateTime错误...

当我安慰每一日期,我可以看到泰德它被正确转换为2016年1月2日,但日期时间部分崩溃..

+0

此问题与您正在使用的计算机上的日期文化有关 – iceDragon

+0

由于机器操作系统已损坏? – BENN1TH

+0

你正在开发网络或桌面应用程序吗? – iceDragon

回答

1

首先,删除此字符串操作,它是坏的编码...

string dateString = Convert.ToString(rowData["Date"]).ToString(); 

。替换(“。”,“/”);


更新

还有就是DateTime价值Sqlite的一个普遍的误解。 为什么?

因为SqliteDateTime值没有存储的数据类型建立在默认情况下Sqlite处理日期和时间值这样的,在他的数据类型:

  • TEXT为ISO8601字符串(“YYYY-MM -DH HH:MM:SS.SSS“)。

  • REAL作为Julian日数,自格林威治中午至公元4714年11月24日中午以来的天数。根据预测的公历。

  • INTEGER as Unix Time,1970-01-01 00:00:00以来的秒数。

如何捕捉错误

所以这个问题可能是

  • 一个:铸造错误的数据类型为String

  • :一个其他日期格式比您中的ISO8601 TEXT科拉姆(["Date"]

  • Ç:其他Culture设置在连接字符串

尝试一些像这样的代码:

try 
{ 
    string dateString = rowData["Date"].ToString();  
} 
catch (System.Exception ex) 
{ 
    throw new System.Exception("Couldn't get Data from Row! Maybe wrong DataType?") 
}  

DateTime dateValue; 
if (!DateTime.TryParse(dateString, out dateValue)) 
{ 
    // handle parse failure 
    throw new System.Exception("Couldn't parse this String: " + dateString) 
} 
+0

我删除了字符串操作上述情况仍然异常。刚刚检查过的excel单元格和所有都是01.02.2016日期格式没有空格 – BENN1TH

2

你有没有尝试设置不变的文化吗?

DateTime yourdate= DateTime.ParseExact(rowData["Date"], "yyyy-MM-dd", 
             CultureInfo.InvariantCulture) 
+1

这是更好的解决方案,因为它独立于'CultureInfo'。 +1 – Smartis

+0

刚刚尝试过,但仍然得到异常 – BENN1TH

+0

DateTime.ParseExact(“01.02.2016”,“yyyy-MM-dd”,CultureInfo.InvariantCulture); &DateTime.ParseExact(“01/02/2016”,“yyyy-MM-dd”,CultureInfo.InvariantCulture);仍然崩溃了程序 – BENN1TH