2012-04-20 97 views
0

我想在会话(DATE1)添加日期如下:字符串未被识别为有效的DateTime

Session["DateLesson"] = date1.ToString("dd.MM.yyyy"); 
从我想借此值会话

现在:

var asd = Session["DateLesson"]; 
/*asd = "20.04.2012"*/ 
var datelesson = DateTime.Parse((string) asd); 

而且它给了我这个异常:无法识别为有效的DateTime

出现FormatException

回答

1

为什么要将日期保存为字符串?

你可以简单地将其存储这样的:

Session["DateLesson"] = date1; 

,然后检索它像这样:

var datelesson = (DateTime)Session["DateLesson"]; 
+0

我需要它在dd.mm.yyyy格式 – Alex 2012-04-20 13:55:58

4

在大多数语言环境中,句点不是有效/标准分隔符。您需要结合使用DateTime.ParseExact()和格式字符串来告诉函数如何读取它。更重要的是,如果将它读回日期时间是您的主要目标,那么为什么不把日期时间放在会话中呢?这似乎方式更有效,更容易,更可维护我。

+0

这是不完全正确的。期间*是某些地区的标准分隔符(例如,俄罗斯)。无论使用Parse还是ParseExact,OP都将从使用接受“IFormatProvider”参数的重载中受益。 – phoog 2012-04-20 13:42:58

+0

@phoog - 添加了一些黄鼠狼的单词。快乐? – 2012-04-20 13:49:11

0

不要让值作为一个字符串,但作为初始类型的对象:

public DateTime? DateLesson 
{ 
    get 
    { 
     DateTime? dateTime = Session["DateLesson"] as DateTime?; 
     if (dateTime.HasValue) // not null 
     { 
      // use dateTime.Value 
     } 
    } 
    set 
    { 
     Session["DateLesson"] = value; 
    } 
} 
+0

downote,***的原因是什么? – abatishchev 2012-05-01 10:54:33

+0

不知道 - 考虑到问题中的细节,这似乎是一个合理的解决方案,所以我反驳了这个问题。 – 2013-04-09 10:25:33

1
string value = "20.04.2012"; 
DateTime datetime = DateTime.ParseExact(value, "dd.MM.yyyy", null); 

这将返回4/20/2012 12:00:00:00 AM

+0

string value = Session [“DateLesson”]。ToString(); DateTime date = DateTime.ParseExact(value,“dd.MM.yyyy”,null);字符串未被识别为有效的日期时间。 – Alex 2012-04-20 14:17:46

相关问题