C# 将怪异的日期格式转换为短日期时间

C# 将怪异的日期格式转换为短日期时间,c#,javascript,asp.net,html,C#,Javascript,Asp.net,Html,我有一个日期字符串,从ExtJS日期时间选择器返回,如下所示: Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time) 因此,我需要将其设置为以下格式:YYYY-mm-dd,使用C#或JavaScript。 我怎么能这样做?我已尝试使用DateTime.Parse,但无法对其进行分析。 有什么想法吗?可能这可以帮助你可能这可以在JavaScript中帮助你 new Date("Wed Apr 25 2012 00:00:00 GMT+0300

我有一个日期字符串,从ExtJS日期时间选择器返回,如下所示:

Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)
因此,我需要将其设置为以下格式:YYYY-mm-dd,使用C#或JavaScript。 我怎么能这样做?我已尝试使用DateTime.Parse,但无法对其进行分析。 有什么想法吗?

可能这可以帮助你

可能这可以在JavaScript中帮助你

new Date("Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)")
将给您一个日期对象。然后,您可以通过选择JavaScript中的(UTC)年、月和日,将其格式化为日期格式(或者最好是ISO8601,或者使用.getTime()将其设置为epoc的毫秒)

new Date("Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)")

将给您一个日期对象。然后,通过选择(UTC)年、月和日,您可以将其格式化为日期格式(或者最好是ISO8601,或者使用.getTime()从epoc中选择毫秒),使用Javascript尝试此操作

var d = new Date('Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)');
var curr_day = d.getDate();
var curr_month = ('0'+(d.getMonth()+1)).slice(-2)
var curr_year = d.getFullYear();
var new_date  = curr_year+"-"+curr_month+"-"+curr_day;

使用Javascript试试这个

var d = new Date('Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)');
var curr_day = d.getDate();
var curr_month = ('0'+(d.getMonth()+1)).slice(-2)
var curr_year = d.getFullYear();
var new_date  = curr_year+"-"+curr_month+"-"+curr_day;

在.NET中,如果日期的字符串表示形式为保证的格式,则可以使用来解析它:

var input  = "Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)"
                            .Substring(0, 15);
var format = "ddd MMM dd YYYY";
var date = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture);

// Now date is a DateTime holding the date

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

// Now output is 2012-04-25

在.NET中,如果日期的字符串表示形式为保证的格式,则可以使用来解析它:

var input  = "Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)"
                            .Substring(0, 15);
var format = "ddd MMM dd YYYY";
var date = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture);

// Now date is a DateTime holding the date

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

// Now output is 2012-04-25

您似乎并不关心时间和时区信息,因此实际上可以使用
DateTime.ParseExact
来解析日期。假设月日部分可能只是一个位数(例如,2012-04-01是
Sun Apr 1 2012
),则需要使用的模式是
ddd MMM d yyyy

“最难”的部分实际上是时间和时区部分的分割。如果月份的日期是个位数,则必须使用长度为14的子字符串;否则长度为15。以下是获取字符串中第四个空格字符的索引的方法:

var str = "Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)";
var index = -1;
for (var i = 0; i < 4; i += 1)
  index = str.IndexOf(' ', index + 1);

可以使用所需的任何格式和区域性将其重新格式化为字符串。

您似乎并不关心时间和时区信息,因此实际上可以使用
DateTime.ParseExact
解析日期。假设月日部分可能只是一个位数(例如,2012-04-01是
Sun Apr 1 2012
),则需要使用的模式是
ddd MMM d yyyy

“最难”的部分实际上是时间和时区部分的分割。如果月份的日期是个位数,则必须使用长度为14的子字符串;否则长度为15。以下是获取字符串中第四个空格字符的索引的方法:

var str = "Wed Apr 25 2012 00:00:00 GMT+0300 (GTB Daylight Time)";
var index = -1;
for (var i = 0; i < 4; i += 1)
  index = str.IndexOf(' ', index + 1);

可以使用您需要的任何格式和区域性将其重新格式化为字符串。

只有在您提示他使用
DateTime.ParseExact
DateTime.TryParseExact
时才有帮助,如果你给他一个关于
DateTime.ParseExact
DateTime.TryParseExact
的提示,我会对你的js代码进行修改,以获得一种可以轻松解析的不变格式(如ticks格式)(如unix时间戳、iso格式)…我会对你的js代码进行修改,以获得不变格式(如ticks格式)它可以很容易地解析(例如unix时间戳、iso格式)…不要忘记前导的zero,我宁愿选择unix表示形式。。。没有定制的提琴。。。只是简单的普通代码…@David这正是自定义iso格式的问题:)。。。unix将更加直接和可靠foolproof@David当前位置我已编辑了答案。现在它将添加前导零。不要忘记前导零。我宁愿选择unix表示形式。。。没有定制的提琴。。。只是简单的普通代码…@David这正是自定义iso格式的问题:)。。。unix将更加直接和可靠foolproof@David当前位置我已编辑了答案。现在它将添加前导零。