2012-04-26 116 views
1

我有一个日期字符串,从ExtJS的日期时间选择器returne,至极看起来是这样的:转换怪异的日期格式短日期时间

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

从此,我需要有它的格式为:YYYY-MM -dd,使用C#或JavaScript。 我怎么能这样做?我试过使用DateTime.Parse,它不能被解析。 有什么想法?

谢谢!

+0

我会去你的js代码的适配,得到一个不变的格式(例如,蜱),它可以很容易地解析(如UNIX的时间戳,ISO格式)... – 2012-04-26 09:06:02

回答

5

你似乎并不关心关于时间和时区信息,所以您实际上可以使用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

var date = DateTime 
    .ParseExact(str.Substring(0, index), "ddd MMM d yyyy", CultureInfo.InvariantCulture); 

这可以被格式化回到你想要的任何格式和文化的字符串中。

1

可能这可以帮助你Click

+1

只会帮助,如果你给他提示'DateTime.ParseExact'或'DateTime.TryParseExact' – 2012-04-26 09:04:59

1

在JavaScript

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

会给你一个约会对象。您可以通过选择(UTC)年,月和日来格式化为您的日期格式(或最好是ISO8601或使用.getTime()从epoc毫秒)

+0

或使用简单的使用滴答的unix方式:) – 2012-04-26 09:06:45

1

尝试使用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; 
+1

不要忘记领先的零 – David 2012-04-26 09:07:23

+0

我宁愿去为unix代表...没有自定义fiddeling ...只是简单的普通代码... – 2012-04-26 09:07:37

+0

@David这正是与自定义iso格式的问题:) ... unix会更直接和万无一失 – 2012-04-26 09:08:03

2

在.NET中,在那里你有,有一个保证格式的日期的字符串表示,可以用DateTime.ParseExact解析它:

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