簡體   English   中英

將dd / MM / yyyy轉換為yyyy / MM / dd?

[英]Convert dd/MM/yyyy to yyyy/MM/dd?

我想將字符串'30 / 12/2012'轉換為'2012/12/30'。 我的應用程序設置為“en-CA”,但數據庫默認接受yyyy / MM / dd。

如何在不依賴服務器上設置的當前文化信息的情況下執行此操作?

正如所有評論所說的那樣,但到目前為止沒有一個答案說過: 不要把它作為字符串傳遞給數據庫

盡可能早地解析您收到的任何文本,然后使用DateTime 其他任何地方表示它,包括如何通過參數化SQL 1將其發送到數據庫。 這適用於所有類型的值:盡快將其轉換為數據的“自然”類型,並盡可能長時間保持在自然表示中。 日期不是字符串,如果你確實需要,你應該只將其轉換為字符串 - 理想情況在將它顯示給用戶之前。

解析可以使用DateTime.ParseExactDateTime.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());
        }

在沒有涉及數據庫接受與否的格式的情況下,您可以像這樣進行轉換:

  • 將String轉換為Datetime,如此處所述
  • 更改格式,並再次將其轉換為字符串,像這樣

暫無
暫無

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

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