2017-10-18 54 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

这就是我对问题的解释,因为其他答案涵盖了显然他并不高兴。 –

相关问题