【问题标题】:How to convert dd/mm/yyyy into dd/mm/yyyy如何将 dd/mm/yyyy 转换为 dd/mm/yyyy
【发布时间】:2012-06-25 10:16:07
【问题描述】:

我有一个关于字符串转换的问题。 我有一个文本框,用户将以这种格式(dd/mm/yy)输入日期。

现在我必须对其进行转换,使其对 MySQL 友好。

到目前为止,这就是我所做的

currentExpDate = txtDateStore.txt; //(i.e 25/12/13)
MessageBox.Show(currentExpDate.ToString()); // for debugging
//DateTime dt = DateTime.Parse(currentExpDate);
DateTime dt = DateTime.ParseExact(
    currentExpDate,
    "dd/MM/yyyy",
    CultureInfo.InvariantCulture);
string mySQLDate = dt.ToString("yyyy-MM-dd");

每当我尝试解析它时,它总是会抛出一个错误。我得到字符串异常,说字符串格式是它无法识别的格式。

如果我尝试使用这种格式 dd/mm/yyyy 输入日期,它就像一个魅力。有什么办法可以解决这个问题吗?

谢谢

【问题讨论】:

  • dd/mm/yyyy into dd/mm/yyyy。在我看来没问题;)
  • DateTime.ParseExact(currentExpDate, "dd/MM/yyyy" ...) 当您要求用户输入 dd/MM/yy 时?这不就是这里的差异吗?
  • 其实用户需要输入商品的有效期,格式为mm/yy。但是我需要构建我的字符串,使其变为 dd/mm/yy,稍后我将不得不将其转换为 MySQL 友好格式(yyyy-mm-dd)
  • 如果您将 dd/mm/yyyy 本地化为接受该格式,为什么它会对 MySQL 不友好?我对 MySQL 不太熟悉,但是使用 Informix,我们设置环境变量 DBDATE=DMY4/ 一切都很好!
  • @Frank,对不起,我在这里感到困惑。如果我将 dd/mm/yy 格式直接扔到 MySQL 中,我不确定它是否有效。我一会儿试试。

标签: c# datetime date


【解决方案1】:

您应该直接使用日期作为 DateTime 来存储在您的数据库中。没有理由将其转换回字符串。

【讨论】:

  • 没错。 DateTime 使用 8 个字节的 AFAIK(记号很长)。字符串是可变宽度的。 yyyy-MM-dd 是 10 个字节。
  • 其实用户需要输入商品的有效期,格式为mm/yy。但是我需要构建我的字符串,使其变为 dd/mm/yy,稍后我将不得不将其转换为 MySQL 友好格式(yyyy-mm-dd)
  • 那么为什么不把事情简单化:使用日期列,让用户输入 mm/ /yyyy 并且您将日期默认为 01?..(可惜 MySQL 不支持日期子类型! )
【解决方案2】:

我可能在这里遗漏了一些东西,但是然后使用“dd/MM/yy”格式创建您的DateTime 对象 使用“yyyy-MM-dd”将DateTime 转换为字符串似乎给了我你想要的格式的字符串..

为了回答您的评论,我刚刚使用了您在问题中发布的代码,并将第一次转换的格式更改为“dd/MM/yy”。

String currentExpDate;
currentExpDate = txtDateStore.Text; //(i.e 25/12/13) 
MessageBox.Show(currentExpDate.ToString()); // for debugging 
//DateTime dt = DateTime.Parse(currentExpDate); 
DateTime dt = DateTime.ParseExact(
    currentExpDate,
    "dd/MM/yy",
    CultureInfo.InvariantCulture);
string mySQLDate = dt.ToString("yyyy-MM-dd");  

【讨论】:

  • 是否可以共享您使用的代码,我的是以下总是抛出异常(FormatException)/字符串currentExpDate =“30 /”+ dgvSupplierPurchase.Rows[i].Cells[4]。值.ToString(); MessageBox.Show(currentExpDate.ToString()); //用于调试 DateTime dt = DateTime.ParseExact(currentExpDate, "dd-MM-yyyy", CultureInfo.InvariantCulture); string MySQLDate= DateTime.Now.ToString("yyyy-MM-dd");
  • 困惑的程序员很困惑......这是我复制粘贴代码时发生的截图。唯一不同的是我的文本框实际上是 datagridview 的一部分。但这应该没什么大不了的,我还验证了单元格确实包含我想要的字符串(因此,messageBox.Show)。 i47.tinypic.com/35bwg78.jpg"border="0" alt="TinyPic 提供的图像和视频托管">
  • @username555 创建 DateTime 对象的代码是什么。
  • @username555 我没有数据库设置或您的信息,所以我只能猜测。像我一样尝试使用 TextBox 来查看它是否有效,如果有效,您可能需要仔细查看 datagridview 中的数据。
  • 嗨,马克,这是创建 DateTime 对象的代码。 DateTime dt = DateTime.ParseExact(currentExpDate, "dd-MM-yyyy", CultureInfo.InvariantCulture) 反正没关系,我就用字符串生成器来自定义吧。
猜你喜欢
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 2011-03-18
相关资源
最近更新 更多