【问题标题】:Convert long date/time zone string to datetime将长日期/时区字符串转换为日期时间
【发布时间】:2020-05-01 15:50:06
【问题描述】:

我有一个来自 Telerik DatePicker 的字符串。我要返回的字符串是“2009 年 8 月 1 日星期六 00:00:00 GMT-0400(东部夏令时间)”我需要将其转换为“yyyy-MM-dd”但是我没有运气。我保留错误“字符串未被识别为有效日期时间”。

我试过了:

var fromDate = Convert.ToDateTime(dateFrom)

CultureInfo culture = new CultureInfo("en-US"); 
var fromDate = Convert.ToDateTime(dateFrom, culture);

var fromDate = DateTime.ParseExact(dateFrom, "yyyy-MM-dd", CultureInfo.InvariantCulture);

我尝试过的上述方法都没有奏效。

【问题讨论】:

标签: c# date


【解决方案1】:

这应该完成任务

var date = DateTime.ParseExact(
    "Sat Aug 01 2009 00:00:00 GMT-0400 (Eastern Daylight Time)",
    "ddd MMM dd yyyy HH:mm:ss 'GMT-0400 (Eastern Daylight Time)'",
    CultureInfo.InvariantCulture);

var parsedDate = date.ToString("yyyy-MM-dd");       

DateTime.ParseExact 的第一个参数将是来自 Datepicker 的字符串

var stringFromDatePicker =  "Sat Aug 01 2009 00:00:00 GMT-0400 (Eastern Daylight Time)";

var date = DateTime.ParseExact(stringFromDatePicker,
            "ddd MMM dd yyyy HH:mm:ss 'GMT-0400 (Eastern Daylight Time)'",
            CultureInfo.InvariantCulture);

var parsedDate = date.ToString("yyyy-MM-dd");

【讨论】:

    【解决方案2】:

    基于 user8606929 答案。如果您只对字符串的日期部分而不是时间感兴趣,那么您可以使用 substring 删除字符串的结尾,然后再将字符串解析为 DateTime。大致如下:

    string dateFromDatePicker = "Sat Aug 01 2009 00:00:00 GMT-0400 (Eastern Daylight Time)";
    
    string dateAsString = dateFromDatePicker.Substring(0,15);
    
    DateTime selectedDate = DateTime.ParseExact(dateAsString, "ddd MMM dd yyyy", CultureInfo.InvariantCulture)
    
    

    此外,如果您对日期选择器的代码有任何控制权,您可以查看它的文档以查看是否可以更改所选日期的格式,这可能会使解析/使用变得更容易。

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 2015-09-17
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2021-05-31
      • 2019-04-12
      相关资源
      最近更新 更多