簡體   English   中英

在運行時更改String.Format參數的格式

[英]Changing format of String.Format parameters at run time

我以前的舊LINQ代碼有這樣的東西:

DateOfBirth = string.Format("{0:MM/dd/yyyy}", myTable.DateOfBirth),

但是現在我希望能夠格式化用戶如何從Windows更改其日期模式,因此我將其更改為這樣並且它可以工作:

string regionShortDate = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
string temp = "{0:" + regionShortDate + "}";
DateOfBirth = string.Format(temp, myTable.DateOfBirth),

所以請注意我必須使用字符串連接來構建我的字符串格式化程序? 我認為應該采用更專業的方式來做到這一點。 你有什么建議?

使用DateTime.ToShortDateString方法

DateOfBirth = myTable.DateOfBirth.ToShortDateString();

ToShortDateString方法返回的字符串對文化敏感。 它反映了當前文化的DateTimeFormatInfo對象定義的模式。 例如,對於en-US文化,標准的短日期模式是“M / d / yyyy”; 對於de-DE文化,它是“dd.MM.yyyy”; 對於ja-JP文化,它是“yyyy / M / d”。 特定計算機上的特定格式字符串也可以自定義,以便它與標准短日期格式字符串不同。

使用與當前線程區域性關聯的DateTimeFormatInfo.ShortDatePattern屬性定義的模式格式化當前DateTime對象的值。 返回值與通過使用ToString(String)方法指定“d”標准DateTime格式字符串返回的值相同。

你可以像Habib建議的那樣使用ToShortDateString

它取決於CultureInfo.CurrentCulture因為CultureInfo擁有各種關於通常因語言和地點而異的事項的信息,但包括個人偏好。 因此,雖然CurrentCulture.Name返回en-IEDateTime.Now.ToShortDateString()返回2014-01-24而不是24/01/2014因為可以通過使用CultureInfo.GetCultureInfo("en-IE")返回的對象CultureInfo.GetCultureInfo("en-IE") ,因為我自己的裝備被設置為使用en-IE語言和ISO 8601用於日期和時間。

因此,不要擔心當前文化的名稱和當前與其語言相關的UI文化; 他們可以將UseUserOverride設置為true,並且實際上是根據用戶的設置構建的。

除了Habib的建議,如果你想使用當前的短日期字符串(或者來自任何其他CultureInfo的字符串,你可以使用字符串"d" 。這對你的短日期字符串全部使用的情況沒有任何好處,但如果它將成為更大的短語的一部分,它會很有用:

string.Format("Today is {0:d}.", DateTime.Now)

(在我的系統上, Today is 2014-01-24.或許還有別的東西)。

日期還有其他有用的單字符串格式化字符串 ,可以類似地使用。

編輯:

既然你剛剛指出你使用的是DateTime? 而不是DateTime ,那么你有三個選擇:

  1. 使用DateOfBirth = string.Format("{0:d}", myTable.DateOfBirth) 這導致空案例的空字符串。
  2. 使用string.Format測試nullity,例如DateOfBirth = myTable.DateOfBirth.HasValue ? string.Format("Born on {0:d}.", myTable.DateOfBirth.Value) : "Date of birth unknown"; DateOfBirth = myTable.DateOfBirth.HasValue ? string.Format("Born on {0:d}.", myTable.DateOfBirth.Value) : "Date of birth unknown";
  3. 使用ToShortDateString測試無效性; DateOfBirth = myTable.DateOfBirth.HasValue ? myTable.DateOfBirth.ToShortDateString() : "Date of birth unknown";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM