我的数据库列中的日期时间值为yyyy-MM-dd HH:mm:ss.fff。
但是当我把它变成一个.net数据表,然后把它作为DateTime ...我没有得到毫秒的部分。
我缺少任何类型的演员吗?
String.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", Convert.ToDateTime(dtRow[colIndex]))
这是我的代码,其中dtRow是我的数据表中的特定列。
编辑:
text-align: center
“2014-07-28 15:18:43.000”
其中实际值为“2014-07-28 15:18:43.866”。
谢谢!
答案 0 :(得分:1)
我遇到了这个导致我在这里的问题。默认的“ToString”使用CurrentCulture,它(很可能)使用的格式为毫秒。因此,Parsing等不起作用,因为它将它转换为String(这是问题!)并再次返回,从而丢弃ms。
但是,“对象”是DateTime。这意味着您可以简单地将项目转换为DateTime变量并使用它。在我的情况下,我有一个SQL语句的日期时间,我需要存储为一个字符串 - 并注意到它们在解析时都有.000毫秒。
我的特殊要求是我不知道列的类型 - 因此最后是默认的ToString。
private static string ConvertFieldToString(DataRow row, string fieldName)
{
if (row.IsNull(fieldName))
return null;
if (row[fieldName].GetType() == typeof(DateTime))
{
DateTime dt = (DateTime)row[fieldName];
return dt.ToString("yyyy-MM-dd hh:mm:ss.fff tt");
}
return row.ToString();
}
输出结果如下:2018-04-18 03:30:43.233 PM
在MSDN上阅读更多内容:https://msdn.microsoft.com/en-us/library/k494fzbf(v=vs.110).aspx
答案 1 :(得分:0)
这将为您解决问题
DateTime dt = DateTime.Parse(dtRow[colIndex]);
String.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", dt)
答案 2 :(得分:0)
试试这个:
string dateString = dtRow[colIndex];
string format = "yyyy-MM-dd HH:mm:ss.fff";
DateTime result = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
Console.WriteLine("{0} converts to {1}.", dateString, String.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", result));
答案 3 :(得分:0)
static void Main(string[] args)
{
var dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("date", typeof(DateTime));
for (int i = 0; i < 10; ++i)
{
var r = dt.NewRow();
r[0] = i;
r[1] = DateTime.Now.AddMinutes(-i);
dt.Rows.Add(r);
}
foreach (var r in dt.Rows.OfType<DataRow>())
{
Console.WriteLine("{0} - {1:yyyy-MM-dd HH:mm:ss.fff}", r[0], r[1]);
}
Console.ReadLine();
}
如果DataTable
中添加的值为DateTime
,您不需要转换任何内容,它已经DateTime
,格式化功能会很好地解决所有问题。如果您需要以编程方式访问各个属性,只需将其强制转换:
DateTime timestamp = (DateTime)r[1];