2017-12-12 9 views
2

データベースに、ユーザーのプロファイルデータをキーと値のペアとして保存するテーブルがあります。このペアは常にstring-stringです。例:DateTimeをデータベースに文字列として保存する

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

DataTimeデータを文字列として保存することに少し気をつけています。 DataTime.Ticks.ToString()を保存しています(使用する必要がある場合はDateTimeに再変換してください)。安全で良いアイデアですか?それとも良い方法がありますか?

+2

私はダニを保存するデータベースで働いてきました。データを人間が判読可能な形式に変換することなく、そのデータを読んだり、推論したりすることは不可能です。次に、JavaScriptと.NETの間にダニの違いがあります。 ISO8601文字列またはDateTimeOffsetが優れています。 https://stackoverflow.com/questions/4715620/storing-datetime-utc-vs-storing-datetimeoffset – Jasen

+0

後で別のスキーマデザインを選択すると、基本的なフィールドのセットではなく、あなた自身に感謝します。 –

+0

@JoelCoehoorn、あなたは誕生日のために独自の列を使用することを意味しますか? –

答えて

3

いいえ、それは悪い考えです。タイムゾーンを失うダニに変換する。 DateTimeを文字列として格納する必要がある場合は、timezoneに変換します。

例:

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からのオフセット。

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 

DateTime vs DateTimeOffset

+0

文字列の形式を説明できますか?そして、 'DateTimeOffset'は' DateTime'とどう違うのですか? –

+0

@MohammedNoureldinはいくつかの情報とリンクを追加しました – Backs

+2

ここのフォーマットはISO-8601 –