无法将字符串识别为有效的日期时间

时间:2018-10-16 03:02:11

标签: c#

我只想获取从FromDateToDate的天数:

string dt_now = DateTime.Now.ToString("m/d/yyyy");
num_days = (Convert.ToDateTime(dt_now) - Convert.ToDateTime(dr4.GetString(13))).Days;

dr4.GetString(13)来自数据库,格式与 m / d / yyyy

dr4.GetString(13)的样本数据:

  • 2018/3/20
  • 1/19/2013
  • 2/28/2013
  • 2014/3/19
  • 2/22/2017
  • 2017年10月6日

但是我遇到一个错误:

  

字符串未被识别为有效的DateTime

我应该如何正确做?

3 个答案:

答案 0 :(得分:2)

与其使用字符串来表示日期格式,不如将日期值存储为数据库中的datetime数据类型并使用DataReader.GetDateTime()来检索它:

// common usage
num_days = (DateTime.Now - dr4.GetDateTime(13)).Days;

// alternative with Subtract()
num_days = DateTime.Now.Subtract(dr4.GetDateTime(13)).Days;

对于当前状态,请使用以下代码:

var date = DateTime.ParseExact(dr4.GetString(13).Trim(), "M/d/yyyy", CultureInfo.InvariantCulture);
num_days = DateTime.Now.Subtract(date).Days;

答案 1 :(得分:1)

您不能简单地这样做吗?

var provider = CultureInfo.InvariantCulture;
var format = "M/d/yyyy";
var d2 = DateTime.ParseExact(dateString, format, provider);

Console.WriteLine("   Days:         {0,3}", (DateTime.Now - d2).Days);

此处参考:https://docs.microsoft.com/en-us/dotnet/api/system.timespan.totaldays?view=netframework-4.7.2

答案 2 :(得分:0)

您可以像这样使用Timespan类:

string dr4 = "10/2/2018";

TimeSpan duration = DateTime.Now.Subtract(DateTime.Parse(dr4, CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal));

int result = duration.Days;