c# - 字符串未被识别为有效的日期时间问题

标签 c# winforms datetime

我有一个方法,

public static DateTime ToDate(this object value)
{
    return DateTime.ParseExact(value.ToString(), "dd.MM.yyyy", CultureInfo.InvariantCulture);
}

当我用这段代码运行这段代码时,

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(DateTime.Now.ToDate().ToString());
}

这样的程序有错误,

String was not recognized as a valid DateTime

我该如何解决这个问题? 谢谢。

最佳答案

您遇到的问题是您的扩展方法试图专门解析 dd.MM.yyyy 格式的字符串。您正在使用 DateTime.Now 测试您的扩展方法,它以您机器上当前区域性的格式(包括小时、分钟等)返回 DateTime ,可能不是 dd.MM.yyyy 格式。您可以按如下方式测试您的扩展方法:DateTime.Now.ToString("dd.MM.yyyy").ToDate()

但是,如果我理解正确的话,最好按如下方式更改扩展方法。

public static DateTime ToDate(this string value, string format)
{
    return DateTime.ParseExact(value, format, CultureInfo.InvariantCulture);
}

并按如下方式使用

private void button1_Click(object sender, EventArgs e)
{
    // Testing the extension method.
    MessageBox.Show(DateTime.Now.ToString("dd.MM.yyyy").ToDate("dd.MM.yyyy").ToString());
}

或者,如果您因为本地化而在 dd.MM.yyyy 中特别收到一个 DateTime,那么最好像这样在全局范围内设置您的应用程序的文化。

// Substitute appropriate culture.
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");
Thread.CurrentThread.CurrentCulture  = new CultureInfo("ru-RU");

这样你就不需要你的扩展方法,因为 DateTime 将始终采用正确的格式。

关于c# - 字符串未被识别为有效的日期时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489595/

相关文章:

c# - 将服务注入(inject)基本 Controller 类

c# - 以编程方式 WPF listbox.ItemsSource 更新

c# - 确定单选按钮组的检查状态是否已更改

c# - 我的桌面应用程序在使用 async 和 await 调用 Web API 服务时挂起

c# - 以编程方式获取文件夹位置

c# - 如何在 C# 控制台(Windows 窗体)应用程序中使用 WinRT 组件?

VB.NET:如果我使用 Await 运行 CPU 密集型代码会发生什么情况?

javascript - 在 Cosmos DB 存储过程中创建和比较日期

php - 由于 DATETIME 数据,java.lang.String 类型的值 <br 无法转换为 JSONObject

javascript - 如何使用 JavaScript 中的格式规范将字符串转换为日期时间?