Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将DateTime另存为数据库中的字符串_C#_.net_.net Core - Fatal编程技术网

C# 将DateTime另存为数据库中的字符串

C# 将DateTime另存为数据库中的字符串,c#,.net,.net-core,C#,.net,.net Core,我的数据库中有一个表,我将用户的配置文件数据保存为键值对。这一对总是一串一串的。例如: | Id | Name | Value | UserId | |:--:|:---------:|:-------:|:------:| | 1 | FirstName | Some | 55 | | 2 | LastName | One | 55 | | 3 | Birthdate | ? | 55 | | 4 | FirstName

我的数据库中有一个表,我将用户的配置文件数据保存为键值对。这一对总是一串一串的。例如:

| Id |    Name   |  Value  | UserId |
|:--:|:---------:|:-------:|:------:|
|  1 | FirstName |   Some  |   55   |
|  2 |  LastName |   One   |   55   |
|  3 | Birthdate |    ?    |   55   |
| 4  | FirstName | Another |   88   |

我有点担心将
DataTime
数据保存为字符串。保存
DataTime.Ticks.ToString()
(然后在需要使用时再次将其转换为
DateTime
)是否安全且是一个好主意?或者有更好的方法吗?

不,这是个坏主意。因为转换为滴答声会丢失时区。 如果需要将DateTime存储为字符串,请使用进行转换

例如:

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz")          // "2017-06-21T14:57:17-07:00"
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssK")            // "2017-06-21T14:57:17Z"
DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz")    // "2017-06-21T14:57:17+00:00"
“zzz”-与UTC的小时和分钟偏移量


我使用过一个保存滴答声的数据库。如果不将数据转换为人类可读的格式,则无法读取数据并对其进行推理。然后是JavaScript和.NET之间的差异。ISO8601字符串或DateTimeOffset更好。如果您选择不同的架构设计,至少是一组基本的字段,请稍后再看。@JoelCoehoorn,您的意思是在配置文件的专用表中使用自己的列作为生日?是的,以及其他字段(如名称),这样您就不会用其他属性重复数据。您所拥有的被称为实体属性值模式,并且(虽然它有它的位置),它通常被认为是一种需要避免的反模式。这将允许您使用实际日期列作为生日数据。是的,这样更好。SQL数据库擅长保持这种效率。您不必以这种方式编码所有可能的属性。。。只需在表中为您的概要文件基础数据设置一组核心属性,就可以在现有的EAV表中处理其他不太常见的属性。您能解释一下字符串的格式吗?而
DateTimeOffset
DateTime
有何不同呢?@MohammedNoureldin添加了一些信息和links@Backs实际上,我决定像你和Joel Coehoorn说的那样把它们保存为DateTime。然而,这个答案也是有价值的。在接受DateTimeOffset之前,我仍然需要阅读它(到目前为止我还没有时间)。
DateTime date1 = DateTime.UtcNow;
Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", date1));
// Displays -7, -07, -07:00                     

DateTimeOffset date2 = new DateTimeOffset(2008, 8, 1, 0, 0, 0, new TimeSpan(6, 0, 0));
Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", date2));
// Displays +6, +06, +06:00