使用DataReader读取日期

Tea*_*eek 26 .net c# ado.net datareader

我用数据读取器读取了这种格式的字符串.如何使用类似格式阅读日期?

while (MyReader.Read())
{
    TextBox1.Text = (string)MyReader["Note"];
}
Run Code Online (Sandbox Code Playgroud)

Suk*_*van 36

尝试如下:

while (MyReader.Read())
{
    TextBox1.Text = Convert.ToDateTime(MyReader["DateField"]).ToString("dd/MM/yyyy");
}
Run Code Online (Sandbox Code Playgroud)

ToString()方法中,您可以根据您的要求更改数据格式.


Ric*_*ard 12

如果查询的列具有适当的类型

var dateString = MyReader.GetDateTime(MyReader.GetOrdinal("column")).ToString(myDateFormat)
Run Code Online (Sandbox Code Playgroud)

如果查询的列实际上是一个字符串,那么请查看其他答案.


Jon*_*Raa 8

这可能看起来有点偏离主题,但这是我想知道当你在c#中读取一个列为dateTime时会发生什么的帖子.该帖子反映了我希望能够找到关于这种机制的信息. 如果您担心utc和时区,请继续阅读

我做了一点研究,因为我总是非常警惕DateTime作为一个类,因为它自动假设你正在使用什么时区,因为它太容易混淆当地时间和utc时间.

我在这里要避免的是DateTime去'看看我正在运行的计算机是在时区x,因此这个时间也必须在时区x,当我被问到我的价值时我会回复,就好像我在那个时区'

我试图读一个datetime2专栏.

你将从sql server返回的日期时间将最终成为Kind.Unspecified这似乎意味着它被视为UTC,这是我想要的.

在阅读date专栏时,DateTime即使它没有时间也更加容易被时区搞砸(因为它是在午夜时).

我当然认为这是更安全的方式来读取DateTime,因为我怀疑它可能会被sql server中的设置或c#中的静态设置修改:

var time = reader.GetDateTime(1);
var utcTime = new DateTime(time.Ticks, DateTimeKind.Utc);
Run Code Online (Sandbox Code Playgroud)

从那里你可以得到组件(日,月,年)等格式,并格式化你喜欢的方式.

如果你拥有的实际上是一个日期+一个时间,那么Utc可能不是你想要的那样 - 因为你在客户端上乱搞,你可能需要先将它转换为当地时间(取决于时间的含义是什么) ).然而,这开辟了一大堆蠕虫..如果你需要这样做,我建议使用像诺达时间这样的库.有TimeZoneInfo标准库,但在简单调查,它似乎并不有一个适当的集的时区.您可以TimeZoneInfo使用该方法查看提供的列表TimeZoneInfo.GetSystemTimeZones();

我还发现sql server management studio在显示之前不会将时间转换为本地时间.这是一种解脱!

  • 您可以像`DateTime.SpecifyKind(reader.GetDateTime(1),DateTimeKind.Utc)`这样缩短时间,因此您不必手动处理刻度线:) (2认同)

Muh*_*tar 7

 (DateTime)MyReader["ColumnName"];
Run Code Online (Sandbox Code Playgroud)

要么

Convert.ToDateTime(MyReader["ColumnName"]);
Run Code Online (Sandbox Code Playgroud)