2012-03-14 142 views
1

我正在創建一個自定義類型DateOnly,其實際上是一個DateTime,其中刪除了時間部分。如何將非日期值格式化爲日期值

我遇到了,我想格式化我的新類型就像一個日期值一個小問題:

Dim startDate As New DateOnly(2012, 1, 2) 
Debug.WriteLine(String.Format("{0:ddd}", startDate)) 

此輸出:02/01/2012,我希望能夠格式化這是Mon

注:我沒有任何包括我的代碼爲DateOnly類型(讓事情變得簡單),但我可以補充,如果要求

+0

我猜格式字符串「ddd」(或Date的任何其他格式字符串)只能在DateTime對象上使用。如果您想使用'DateTime'格式代碼,您可能想嘗試從DateTime – Arun 2012-03-14 16:48:03

+0

uhh中繼承新的DateOnly類,並將其轉換爲'DateTime'。 – dotjoe 2012-03-14 16:48:23

+0

但是,datetime.date已經只返回日期部分..並且當你提到mon時,你是在想一個星期一?你想在星期一格式化所有的日期嗎? – gbianchi 2012-03-14 16:50:55

回答

4

我已經設法通過我的自定義類型實現IFormattable回答我的問題:

Public Overloads Function ToString(fmt As String, provider As IFormatProvider) As String Implements IFormattable.ToString 
    Return String.Format("{0:" + fmt + "}", _dateValue) 
End Function 

這似乎這樣的伎倆。

1

對我的作品(C#):

DateTime date = new DateTime(2012, 1, 2); 
    var dateString = String.Format("{0:ddd}", date); //Mon 

反正怎麼樣的下面:

DateTime date = new DateTime(2012, 1, 2); 
var dayName= date.DayOfWeek.ToString(); 

如果DateOnly是一個DateTime,你可以這樣做:

DateOnly.DayOfWeek.ToString(); 

所有的文化在http://msdn.microsoft.com/en-us/library/system.datetime.dayofweek.aspx

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[(int) 
       System.DateTime.Now.DayOfWeek]; 

更多信息

+0

他沒有使用DateTime,他有他自己的類,他試圖將他的格式應用到名爲DateOnly。 – Khan 2012-03-14 16:57:14

+0

他不需要他自己的班級來實現這一點。無論如何,如果他自己的類返回一個DateTime對象,他仍然可以使用.DayOfWeek.ToString(); – 2012-03-14 16:58:33

+0

你的第一個代碼使用'DateTime'我使用的是一個自定義的類型'DateOnly','DayOfWeek.ToString'返回'Monday'並且不同於'ddd'它返回'Mon' – 2012-03-14 16:59:25