将系统日期格式转换为C#中DateTime可接受的日期格式

时间:2014-03-18 00:57:19

标签: c# .net datetime

如何将系统日期格式(如3/18/2014)转换为DateTime中可读的格式? 我希望得到两个日期的总天数,这两天将来自两个TextBox。

我尝试过这种语法:

DateTime tempDateBorrowed = DateTime.Parse(txtDateBorrowed.Text);
DateTime tempReturnDate = DateTime.Parse(txtReturnDate.Text);
TimeSpan span = DateTime.Today - tempDateBorrowed;
rf.txtDaysBorrowed.Text = span.ToString();

tempDateBorrowed始终返回DateTime varibale的最短日期。我认为这是因为DateTime没有正确解析我的系统日期格式。结果,它错误地显示了天数。例如,如果我分别尝试输入2014年3月17日和2014年3月18日,我总是得到-365241天而不是1天。

编辑:我希望我的语言环境是非特定的,所以我没有为我的日期格式设置特定的语言环境。 (顺便提一下,我的系统格式是en-US)

6 个答案:

答案 0 :(得分:1)

ToString不是天

TimeSpan.TotalDays Property

答案 1 :(得分:1)

请改用DateTime.ParseExact方法。

请参阅以下示例代码(因为我使用Console应用程序编写此代码,所以我使用了字符串而不是TextBoxes)。希望这会有所帮助。

class Program
    {
        static void Main(string[] args)
        {
            string txtDateBorrowed = "3/17/2014";
            string txtReturnDate = "3/18/2014";
            string txtDaysBorrowed = string.Empty;

            DateTime tempDateBorrowed = DateTime.ParseExact(txtDateBorrowed, "M/d/yyyy", null);
            DateTime tempReturnDate = DateTime.ParseExact(txtReturnDate, "M/d/yyyy", null);
            TimeSpan span = DateTime.Today - tempDateBorrowed;
            txtDaysBorrowed = span.ToString();
        }
    }

答案 2 :(得分:0)

您可以尝试在文本框中指定日期时间的格式,例如

DateTime tempDateBorrowed = DateTime.ParseExact(txtDateBorrowed.Text.Trim(), "M/d/yyyy", CultureInfo.InvariantCulture);
DateTime tempReturnDate = DateTime.ParseExact(txtReturnDate.Text.Trim(), "M/d/yyyy", CultureInfo.InvariantCulture);

此外,您可能需要检查文本框中的值是否有效。

答案 3 :(得分:0)

我的第一个想法是将TextBox控件替换为DateTimePicker或等效,具体取决于您正在开发的平台。将字符串转换为日期或反之亦然比起初看起来更痛苦。


或者您可以尝试使用DateTime.ParseExact来指定确切的预期格式:

DateTime tempDateBorrowed =
    DateTime.ParseExact("3/17/2014", "M/dd/yyyy", CultureInfo.InvariantCulture);

或者您可以在DateTime.Parse的调用中指定特定的文化:

var tempDateBorrowed = DateTime.Parse("17/3/2014", new CultureInfo("en-gb"));

var tempDateBorrowed = DateTime.Parse("3/17/2014", new CultureInfo("en-us"));

答案 4 :(得分:0)

在使用DateTime.Parse解析之前,尝试将日期格式化为iso 8601或类似内容。

2014-03-17T00:00:00应该与DateTime.Parse一起使用。 ( “YYYY-MM-DDTHH:MM:SSZ”)

答案 5 :(得分:0)

试试这个:

if(DateTime.TryParseExact(txtDateBorrowed.Text, "M/d/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out tempDateBorrowed))
{
    TimeSpan span = DateTime.Today - tempDateBorrowed;
}