【问题标题】:Removing time part from a string c#从字符串c#中删除时间部分
【发布时间】:2018-05-02 00:50:31
【问题描述】:

我正在尝试从字符串中删除时区。

字符串如下所示。

2018 年 2 月 5 日上午 6:54:00

此数据已从本地数据库检索。

代码部分:

 string datCommisioned = (rdr.GetValue(4).ToString());
 string dateonly = datCommisioned.ToString("dd/MM/yyyy");

当我尝试执行上述编码时,出现错误,

无法从“字符串”转换为“System.IFormatProvider”

知道如何捕捉不包括时间的日期部分吗?谢谢!

编辑:这可能不是重复的问题,因为我在发布之前参考了其他问题。这个问题的上下文不同,因为我提取的字符串未被识别为有效的 DateTime(用户手动输入),因此不能使用 DateTime 类。

【问题讨论】:

标签: c#


【解决方案1】:
//Assuming value at index 4 is a DateTime.
string datCommisioned = rdr.GetDateTime(4).ToString(@"dd/MM/yyyy");

将更具体和强类型的方法与 DataReader 一起使用是一种很好的做法。帮助更快地识别错误。

【讨论】:

  • 为什么是“@”符号?
  • @pm100 以避免添加转义符('\')。我的习惯,但在示例中不是必需的。出于本能,我避免在格式字符串中转义。
【解决方案2】:

有几种方法

  1. 使用DateTime 对象。

    DateTime dateTime = DateTime.Parse(datCommissioned);
    string dateonly = dateTime.ToString("dd/MM/yyyy");
    
  2. 在空白处分割

    var split = datCommissioned.Split(' ');
    string dateonly = split[0];
    

【讨论】:

  • 当您可以直接从 DataReader 获取 DateTime 时,我不建议进行解析
  • @CamiloTerevinto 没有任何地方表明他正在使用DataReader,尽管我从缩写中看到了为什么会这样。
  • 是的,正如 Camilo 提到的,我正在使用数据读取器对象从本地数据库中读取数据。此数据已由用户手动插入。当我使用 DateTime 类时有一个例外。 System.FormatException: '字符串未被识别为有效的日期时间。'我认为这个问题的原因是因为数据是由用户手动输入的。 @蒂姆
  • @mattdaemon 有很多方法可以解决这个问题。在Parse 周围加上try,或者在解析之前以某种方式确保数据正确。如果将其保存/检索为字符串,则此处的其他答案将不起作用。
【解决方案3】:

您只需将其更改为这样。

var datCommisioned = DateTime.parse(rdr.GetValue(4)).ToString("dd/MM/yyyy");

您当前正在将其转换为字符串,然后尝试 ToString() 字符串,而您只需要 toString() 来自阅读器的日期。

【讨论】:

  • 你怎么知道GetValue返回DateTime
  • 是的,我刚刚意识到我没有。需要编辑它来解析它。
【解决方案4】:

这里只是另一种方法;您可以利用 DateTime.Parse() 或者更安全的替代方法 DateTime.TryParse() 将字符串转换为 DateTime 对象。然后,使用 DateTime 对象的 Date 属性基本上将时间设置为午夜,即。 00:00:00。根据您使用日期的目的,使用 DateTime 对象而不是字符串可能会有所帮助。然后,您可以调用 ToString(“d”) 或使用其他格式化程序以所需格式为您提供仅日期部分。

if (TryParse(datCommissioned, out DateTime commissionedDate))
{
       commisionedDate = commisionedDate.Date;
       string commissionedDateText = commissionedDate.ToString(“dd/MM/yyyy”);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多