2014-07-17 32 views
0

我想更改字符串的格式,如下面所示的示例。字符串中的日期轉換

input : `June 03` output : `2014/06/03` 
input : `11-12` output : `2014/12/11` 
input : `11-12-2014` output : `2014/12/11` 

我最初嘗試是這樣的:

Format(CDate(mskExpDate.Text), "yyyy/MM/dd") 

它曾經在June 0311-12-2014,但如果我進入11-12返回2014/11/12

我在做什麼錯在這裏?

如何讓代碼適用於所有格式化案例?

回答

2

你可以寫一個函數,試圖解析日期的三種格式,並返回可使用Date.TryParseExactcustom date and time formats解析第一個:

Public Function ParseMyDate(dateString As String) As Date 
    Dim d As Date 
    If Date.TryParseExact(dateString, "MMMM dd", CultureInfo.InvariantCulture, DateTimeStyles.None, d) Then Return d 
    If Date.TryParseExact(dateString, "dd-MM", CultureInfo.InvariantCulture, DateTimeStyles.None, d) Then Return d 
    If Date.TryParseExact(dateString, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, d) Then Return d 
    Return Nothing 'you could throw an exception here instead 
End Function 

用法:

Dim d1 As Date = ParseMyDate("June 03") 
    Dim d2 As Date = ParseMyDate("11-12") 
    Dim d3 As Date = ParseMyDate("11-12-2014") 

    Debug.WriteLine(d1.ToString("yyyy/MM/dd")) 
    Debug.WriteLine(d2.ToString("yyyy/MM/dd")) 
    Debug.WriteLine(d3.ToString("yyyy/MM/dd")) 

輸出:

2014/06/03 
2014/12/11 
2014/12/11 
+0

謝謝先生。它可能在像'格式(日期,格式字符串)'這樣的單個代碼'' – Sathish

+1

我不確定這是一個問題還是一個評論,但是你不能在一行代碼中這樣做,特別是不使用格式方法 –

+0

那麼我有一個疑問先生。之前我只使用格式字符串,只是如何將6月03日轉換爲03/06-2014,但爲什麼它不轉換11-12至11-12-2014 – Sathish

-1

在我看來,你將不得不處理11-12格式作爲一個特殊的情況下,像這樣:

Private Function ConvertDate(ByVal inputStringDate As String) As Date 
    If inputStringDate.split("-").Length = 2 Then 
     inputStringDate &= "-" & Now.Year 
    End If 
    Dim outputDate As Date = Format(CDate(inputStringDate), "yyyy/MM/dd") 
    Return outputDate 
End Function 

測試:

Dim inputStringDate1 As String = "June 03" 
    Dim inputStringDate2 As String = "11-12" 
    Dim inputStringDate3 As String = "11-12-2014" 

    Dim date1 As Date = ConvertDate(inputStringDate1) 
    ' date1 = #6/1/2003# 
    Dim date2 As Date = ConvertDate(inputStringDate2) 
    ' date2 = #12/11/2014# 
    Dim date3 As Date = ConvertDate(inputStringDate3) 
    ' date3 = #12/11/2014# 
0

你將不得不創造一些邏輯?然後指定您給出的日期解析程序的輸入類型(即,其中是月,日,年等...)

DateTime.ParseExact("datestring", "dd/MM/yyyy", Nothing, DateTimeStyles.NoCurrentDateDefault) 
+0

謝謝你的回覆先生。我想將'11-12'轉換爲'11-12-2014'。如果我給日期只有它的返回日期currentmonth當前年份那樣的先生 – Sathish