Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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# 从db RESTful web API最佳实践传递日期_C#_Sql Server_Date_Asp.net Web Api - Fatal编程技术网

C# 从db RESTful web API最佳实践传递日期

C# 从db RESTful web API最佳实践传递日期,c#,sql-server,date,asp.net-web-api,C#,Sql Server,Date,Asp.net Web Api,因此,我的数据库中有两种类型的日期,date(yyyy-mm-dd)和datetimeoffset(yyy-mm-ddThh:mm:ss.ms+Z),我想知道当我从数据库获取数据并将其作为json传递到UI/mobile时,处理它的最佳实践是什么 我过去总是将日期解析为datetimeoffset,因此正常日期将类似于2018-09-24T00:00:00.000+00:00,而不是简单的2018-09-24,但它与已经像DB中那样保存的datetimeoffset完美配合使用 您将看到SQL

因此,我的数据库中有两种类型的日期,
date(yyyy-mm-dd)
datetimeoffset(yyy-mm-ddThh:mm:ss.ms+Z)
,我想知道当我从数据库获取数据并将其作为json传递到UI/mobile时,处理它的最佳实践是什么

我过去总是将日期解析为
datetimeoffset
,因此正常日期将类似于
2018-09-24T00:00:00.000+00:00
,而不是简单的
2018-09-24
,但它与已经像DB中那样保存的
datetimeoffset
完美配合使用
您将看到SQL Server的
Date
DateTime
DateTime2
都映射到.Net的
DateTime
数据类型,
DateTimeOffset
映射到
DateTimeOffset


您可以通过多种方式处理这种情况

1:从API端始终给出预定义的日期格式值

示例
yyyy-mm-ddThh:mm:ss.ms+Z

根据条件,您可以从客户端对其进行转换

2:保留不同的视图模型/属性可能用于存储
yyyy-mm-dd
您可以提供
string
数据类型,以及
yyy-mm-ddThh:mm:ss.ms+Z
DateTime
。根据数据库,您可以编写条件并映射特定数据

3:保留一个用于返回日期的属性,并将其设置为
string

示例:
publicstringcurrentDate{get;set;}
并且您可以简单地映射数据库值(应该完成转换)。在这种情况下,客户端不需要担心日期转换,它们可以简单地显示您从api传递的内容


注:方法3不可取,因为在某些情况下,用户可能会在某些其他地方看到
yyyy-mm-dd
,而在某些其他地方看到
yyy-mm-ddThh:mm:ss.ms+Z

取决于您的用例。@Strike08您能解释一下您的意思吗?这样我就可以为您提供所需的详细信息更好的办法是始终使用datetimeoffset(yyyy-mm-ddThh:mm:ss.ms+Z)当您从API和客户端返回时,您可以进行适当的日期转换。@ArunprasanthKV我也这么认为,但决定并非完全由我决定,因此我需要为这两种情况提供解决方案(如果我坚持1或2格式)然后我的上级做出这样的决定。在这种情况下,你可以选择不同的视图模型,一个带有datetime,另一个带有string,并根据你的条件分配值。我尝试使用datetime作为日期,但我得到的结果是“vacationDate”:“2015-02-06T00:00:00”,我不希望在json中传递日期时显示00:00:00(到UI或其他),我不太确定这里的“this”是什么意思。Net framework没有“Date”的数据类型-如果您只想使用Date的数据类型,可以尝试使用Noda Time。在创建日期的字符串表示形式时,``00:00:00`总是可以忽略,只需使用
DateTimeInstance.ToString(“dd/MM/yyyy”)
,您会认为我将使用第二种方法,对于详细的日期,我将只保留它
DateTime
,而短日期
yyyy-mm-dd
我将使用类似这样的
public-DateTime-VacationDateString{get{return CommonUtils.ConvertDateToString(VacationDate);}set{;}
public-DateTime-VacationDate日期如果您对在ui中显示不同的格式没有意见,那么您可以这样做。
SQL Server Database Engine type             .NET Framework type
date (SQL Server 2008 and later)            DateTime
datetime                                    DateTime
datetime2 (SQL Server 2008 and later)       DateTime
datetimeoffset (SQL Server 2008 and later)  DateTimeOffset