【问题标题】:date conversion not work with my system date time [duplicate]日期转换不适用于我的系统日期时间[重复]
【发布时间】:2016-07-18 06:38:50
【问题描述】:

我的系统日期采用mm/dd/yyyy 格式,我的代码将日期转换为dd/mm/yyyy 格式。现在我想要yyyy/mm/dd 格式的日期以更新数据库中的表。我正在尝试:

string d = Convert.ToDateTime(FromDate).ToString("yyyy/MM/dd");

但它返回:yyyy/dd/mm

【问题讨论】:

  • 你应该使用DateTime.ParseExact
  • 能否请您出示minimal reproducible example?即我可以复制、粘贴和运行证明问题的代码?
  • FromDate 的值是多少?
  • 与其摆弄字符串,不如将数据放入DateTime 变量中,然后继续使用这些变量。假设 SQL Server,在那里使用适当的日期时间数据类型,依靠 ADO.Net 来完成这些值的转换。只需避免字符串,您就不必考虑“格式”。
  • FromDate = 10/07/2016 i.i dd/mm/yyyy 格式的值。

标签: c# .net


【解决方案1】:

您应该使用原始格式转换为 DateTime,然后将其转换为您想要的格式。像这样:

string FromDate = "12/13/2016";
string originalFormat = "MM/dd/yyyy";
string expectedFormat = "yyyy/MM/dd";
string d = DateTime.ParseExact(FromDate, originalFormat, CultureInfo.CurrentCulture)
                    .ToString(expectedFormat);

Console.WriteLine(d);

如果你不确定输入的格式,你可以使用这个安全的逻辑:

string FromDate = "12/13/2016";
string originalFormat = "MM/dd/yyyy";
string expectedFormat = "yyyy/MM/dd";

DateTime convertedDate;
string expectedDate = null;
if (DateTime.TryParseExact(FromDate, originalFormat, CultureInfo.CurrentCulture,
                                    DateTimeStyles.AssumeLocal, out convertedDate))
{
    expectedDate = convertedDate.ToString(expectedFormat);
}
else
{
    // handle format errors.
}

Console.WriteLine(expectedDate);

【讨论】:

  • 转换失败会怎样?
  • @un-lucky 用户说他有一个日期是指定的格式。他没有说他有一个未知的格式,他必须检查它是否是某种格式。如果我 100% 确定格式,我不会使用 TryParse
  • 但是作为开发者你应该关心异常
  • @un-lucky 我确实关心可能发生的异常。这个问题不是这样的。
  • @user3185569 - 我们不知道输入的实际样子。 OP没有说。恕我直言,这里有很好的异常预防措施。
【解决方案2】:

使用DateTime.TryParseExact 你会得到它的工作。让FromDateMM/dd/yyyy 格式的日期,所需的格式字符串为"yyyy/MM/dd" 考虑代码:

string FromDateString ="07/18/2016";
string fromStringFormat= "MM/dd/yyyy";
DateTime FromDate;
if(DateTime.TryParseExact(FromDateString, fromStringFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out FromDate))
{
   string requiredString= FromDate.ToString("yyyy/MM/dd");
   // Continue coding
}
else
{
  // Conversion failed
}

Here is working Example

【讨论】:

  • 从日期是 dd/mm/yyyy 格式我只想要 yyyy/mm/dd 格式,但它显示错误字符串未被识别为有效的日期时间。
  • @RahulSoni :哪一行给了你错误? Here is Working Example
  • FromDate = 10/07/2016 ToDate = 18/07/2016 string d = Convert.ToDateTime(FromDate).ToString("yyyy/MM/dd");给出: 2016/10/07 字符串 dd = Convert.ToDateTime(ToDate).ToString("yyyy/MM/dd") 给出: 如果我使用字符串 d = Convert.ToDateTime(FromDate).ToString("yyyy/dd /毫米”);给出:2016/07/10 字符串 dd = Convert.ToDateTime(ToDate).ToString("yyyy/dd/MM");给出:错误
  • 我的回答中有Convert.ToDateTime吗?你还在运行你的代码吗?您为什么不尝试提供的答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多