2012-04-26 117 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