2017-10-18 84 views
0
string date = "23/12/2017"; 

DateTime dt = DateTime.ParseExact(
    date, 
"dd/MM/yyyy hh:mm:ss tt", 
    CultureInfo.InvariantCulture); 

dt它給我2017年12月23日12:00:00 AM如何字符串轉換爲DateTime對象與當前時間MVC

什麼辦法做我必須使用轉換該字符串dd/mm/yyyy與當前的時間,因爲如果我在03:20 PM運行這段代碼,我想在我的dt對象

我有一個接受一個日期作爲字符串,並將其保存到AA數據庫表的ASP.NET MVC行動"23/12/2017 03:20:00 PM",在類型爲DATE的字段中。

我正在保存我的dt對象。我想把我的日期保存爲DD/MM/YYYY,所以我不需要改變它的順序。現在dt對象是MM/DD/YYYY格式。所以當我瀏覽我的表格數據時,它會以MM/DD/YYYY順序顯示我的數據(日期)。我要訂購我的DT對象作爲DD/MM/YYYY它表保存爲DD/MM/YYYY所以每當我從我的表值,我沒有改變順序

/// asp.net Entities link to create connection with DataBase 
    private DatabaseEntities db = new DatabaseEntities(); 

//// Method to Save date in database 
    public ActionResult SaveDate(string date){ 
     var DateTableObject = new Date(); 
     DateTime dt = DateTime.ParseExact(date, "dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture).Add(DateTime.Now.TimeOfDay); 

     DateTableObject.Date = dt; 
     db.Date.add(DateTableObject); 
     db.SaveChanges(); 
    } 

    //// Model class 
    public class Date{ 
     public DateTime Date {set; get;} 
    } 

/// Method to get dates 
public ActionResult GetDates(){ 
    return View(db.Date.tolist()); 
} 

鑑於我「M在MM/DD/YYYY格式接收日期

+2

你的意思是「23/12/2017 03:20:00 PM」?如果沒有,爲什麼你會失去20分鐘?該時間您想使用哪個時區 - 系統時區,UTC還是其他? (請注意,這實際上與ASP.NET沒有關係。)我期望您的當前代碼拋出異常,因爲您不*提供您聲稱的格式。請提供[mcve]。 (實際上,它甚至不會編譯,因爲你試圖解析'date'而不是's'。) –

+2

這仍然會拋出異常。請付出努力,提供您實際運行*的[mcve]。 –

+0

因爲你沒有時間解析日期時間,你*應該*得到你看到的結果。如果您想添加'DateTime.TimeOfDay',則可以添加當前時間。https://msdn.microsoft.com/zh-cn/library/system.datetime.timeofday(v=vs.110).aspx –

回答

1

如果您知道日期字符串正確的文化,你可以使用DateTime.Parse解析日期和然後添加當前的當地時間:

var finalDateTime = DateTime.Parse("23/12/2017",CultureInfo.GetCultureInfo("en-GB")) 
          .Add(DateTime.Now.TimeOfDay); 

許多國家使用dd/MM/YYYY格式,因此即使您不知道實際區域設置,也可以使用其中一種作爲後備。

如果你不知道的語言環境,不僅格式,你可以使用ParseExact來解析日期只有

var finalDateTime = DateTime.ParseExact("23/12/2017","dd/MM/yyyy", CultureInfo.InvariantCulture) 
          .Add(DateTime.Now.TimeOfDay); 

返回的值是一個日期,它的值是2017年12月23日和當前時間。

不要被調試器的顯示混淆。日期沒有格式,它們是二進制值。調試器必須以的一些的方式顯示值。如果像許多開發人員那樣使用美國語言環境,則會看到日期爲MM/dd/YYYY。如果你選中Month屬性,它將會是12.

+0

但調試器也將日期保存爲數據庫中的MM/DD/YYYY格式。我想將其更改爲DD/MM/YYYY,以便我可以將它保存爲DD/MM/YYYY順序,而不必單獨更改訂單。 – Azeem112

+0

@ Azeem112調試器不保存任何東西。你的代碼確實。調試器*將*值顯示爲工具提示和監視變量。如果您遇到問題,請發佈您的代碼。 BTW堅持認爲日期中有某種格式是毫無意義的。我也在非美國地區工作。數十年來,數以百萬計的開發者都在這樣做。那些有問題的存儲*字符串*而不是日期,或被格式化值混淆。無論如何,實際上,發佈代碼 –

+0

@ Azeem112實際上,我的開發機器使用希臘語語言環境,因此我可以直接編寫DateTime.Parse(「23/12/2017」)'並在12月獲得日期。我的SQL Server有一個美國的語言環境,我*根本不*得到任何問題。您是否使用「動態sql」而不是參數化查詢來存儲值? –

4

這可能工作

DateTime dt = DateTime.ParseExact(
      date, 
      "dd/MM/yyyy", 
      CultureInfo.InvariantCulture).Add(DateTime.Now.TimeOfDay); 
     Console.WriteLine(dt); 
+0

雖然這會做OP似乎想要的,但OP想要將當前時間添加到解析日期仍然很奇怪(如果它不是*保證當前日期,那麼您想分析日期的唯一原因) –

+0

@TimothyGroote:這並不奇怪。例如,假設您正在編寫日曆應用程序,並且您正在創建新事件。用戶可能首先選擇日期,然後將日期/時間默認爲「指定日期的當前時間」。 –

+0

同意,沒有他/她想做什麼的背景我猜不出 – duongthaiha

0

這裏只是一些簡單的例子,我用字符串轉換成datetime和時區來獲得日期時間。這個問題有點不清楚,所以這可能會增加一個解決方案。

string date; 
DateTime dt = Convert.ToDateTime(date); 

串:

dt.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture); 

GET currentTime的當地語言:

public static DateTime GetCurrentTime() 
    { 
     TimeZoneInfo timeZone; 
     DateTime time; 
     try 
     { 
      timeZone = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); 
      time = TimeZoneInfo.ConvertTime(DateTime.UtcNow, timeZone); 
     } 
     catch (Exception) 
     { 
      try 
      { 
       timeZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
       time = TimeZoneInfo.ConvertTime(DateTime.UtcNow, timeZone); 
      } 
      catch (Exception) 
      { 
       //logg not succeed 
       time = DateTime.Now; 
      } 

     } 
     return time; 
    } 
+0

爲什麼要這樣做? DateTime具有返回當前時間的'.Now'和'.UtNow'屬性。你可以用'TimeOfDay'提取時間部分。此外,爲什麼你認爲該字符串在用戶的語言環境中?那是什麼[Convert.ToDateTime(日期)](https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/convert.cs#L1724)呢。這是對'DateTime.Parse'的調用,顯式傳遞CurrentCultureInfo –

+0

他們返回服務器時間,我的示例通過指定當地時間代碼返回任何時間您的contry –

+0

這就是我對問題的解釋,因爲其他答案涵蓋了顯然他並不高興。 –

相關問題