[英]Convert dd/MM/yyyy to yyyy/MM/dd?
我想將字符串'30 / 12/2012'轉換為'2012/12/30'。 我的應用程序設置為“en-CA”,但數據庫默認接受yyyy / MM / dd。
如何在不依賴服務器上設置的當前文化信息的情況下執行此操作?
正如所有評論所說的那樣,但到目前為止沒有一個答案說過: 不要把它作為字符串傳遞給數據庫 。
盡可能早地解析您收到的任何文本,然后使用DateTime
在其他任何地方表示它,包括如何通過參數化SQL 1將其發送到數據庫。 這適用於所有類型的值:盡快將其轉換為數據的“自然”類型,並盡可能長時間保持在自然表示中。 日期不是字符串,如果你確實需要,你應該只將其轉換為字符串 - 理想情況是在將它顯示給用戶之前。
解析可以使用DateTime.ParseExact
或DateTime.TryParseExact
來完成,具體取決於這是“可疑”數據(例如來自用戶)還是應該真正正確的數據,並且異常是對不可解析值的最恰當反應。 我建議你使用自定義格式字符串傳遞CultureInfo.InvariantCulture
。 例如:
DateTime date = DateTime.ParseExact(text, "dd/MM/yyyy",
CultureInfo.InvariantCulture);
(如果你做了很多日期/時間工作,你可能還想考慮使用我的Noda Time項目 ,它允許你以更豐富的方式表達價值 - 在這種情況下你可能會使用LocalDate
。)
1如果您尚未使用參數化SQL,而是將值直接烘焙到SQL中,則問題比日期/時間轉換更大。
您可以在Format和大多數ToString函數中指定CultureInfo。
即DateTime.ToString(CultureInfo)和DateTime.Parse(string,CultureInfo)將允許您在一個文化中解析字符串(即當前或new CultureInfo("en-CA")
)並與另一個像new CultureInfo("en-us")
格式化new CultureInfo("en-us")
。
注意:您可以考慮通過設置Thread.CurrentCulture來運行其他文化(即en-US
)下的所有數據庫訪問,因為有時數字fomats也會受到影響(如果數字是storead為字符串)。
如果它總是以相同的格式。 然后將其拆分為/
字符
string[] tempsplit = datestring.Split('/');
然后把它放回原處
string joinstring = "/";
string newdate = tempsplit[2] + joinstring + tempsplit[1] + joinstring + tempsplit[0];
簡單。
首先使用將字符串轉換為DateTime格式
DateTime dt = Convert.ToDateTime("your string value");
然后將其保存在字符串中:
string st=dt.ToString("yyyy/MM/dd");
這會將您的日期格式轉換為您想要的任何所需格式,而不依賴於文化
這似乎有效。
var x = new string[] { "2012/06/12", "20/06/2012", "111/111/1111" };
foreach (var ds in x)
{
DateTime d = default(DateTime);
try
{
d = DateTime.Parse(ds, CultureInfo.GetCultureInfo("en-CA"));
}
catch (Exception ex)
{
try
{
d = DateTime.ParseExact(ds, "yyyy/MM/dd", CultureInfo.InvariantCulture);
}
catch
{
}
}
if (d == default(DateTime))
Console.WriteLine("error");
else
Console.WriteLine(d.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.