【问题标题】:C# Datetime ConversionC# 日期时间转换
【发布时间】:2014-06-06 14:34:12
【问题描述】:

我正在.NET 2.0 和 SQL Server Express 2005 上开发 WinForm 应用程序。

我遇到了日期时间转换的问题。

1) 我需要在 UI 上显示 datetime(datetimepicker),例如“dd/MM/yyyy”,所以我正在使用

public static void ChangeDateFormat(DateTimePicker dtp)
{
    dtp.Format = DateTimePickerFormat.Custom;
    dtp.CustomFormat = "dd/MM/yyyy";
}

2) 用于向我正在使用的 SQL Server 插入数据

datetimePicker1.ToShortDateString()

3) 从 SQL Server 获取数据

Convert(varchar(10),dt,103)

4) 将字符串日期“31/03/2013”​​分配给 datetimepiker

public static DateTime StringToDate(string value)
{
    IFormatProvider formatProvider = new CultureInfo("en-GB");
    DateTime dt = DateTime.Parse(value, formatProvider);
    return dt;
}

5) 将 SQL 日期分配给 datetimepicker

Select dt from ams

datetimepicker1.value=DateTimeClass.dbDateTime( dt );

public static DateTime dbDateTime(string value)
{
    IFormatProvider formatProvider = new CultureInfo("en-US");
    DateTime dt = DateTime.Parse(value, formatProvider);
    return dt;
}

问题:如果用户更改了 Windows 的区域或日期格式,则会发生错误。

我很困惑。我需要使我的应用程序区域独立。

【问题讨论】:

  • 如果你只是从 Sql Server 返回Date,而不是在 SQL Server 端将其转换为字符串,这一切都可以解决。然后你就不需要解析了。您可以在 C# 中进行格式化,例如 var formattedString = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)
  • 您需要清楚地解释(在您的问题中,而不是通过评论)“发生错误”是什么意思。
  • 您还应该将它作为Date 而不是字符串传递给SQL。仅当您(不恰当地)强制将日期时间数据表示为字符串时,才会(倾向于)出现格式问题。
  • @Habib 我认为这是一个好点,你认为这是对区域的了解吗?但有些地方我真的需要将 '31/03/2014' 转换为日期时间。
  • @SudhakarChaudhary,使用CultureInfo.InvariantCulture 转换为字符串将忽略当前区域并仅考虑提供的格式。 ParseExact 也是如此。

标签: c# sql-server datetime sql-server-2005 .net-2.0


【解决方案1】:

问题不在于您要将字符串从 sql 转换为 DataTime 值,而是您将 DateTime 保存为 sql server 中的字符串。通过将您的值保存为日期,您不必转换并且区域等没有问题。解决方案应该将您的 sql 列更改为日期类型,而不是尝试转换您必须猜测格式的日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多