使用 API 或 C# 程序时日期偏移一天
Date is off by one day when using the API or C# program
我正在尝试使用 Postman 或我拥有的 C# 程序向 CRM 发送日期。传递的日期是“2019-09-15”,但在 CRM 中显示时是“2019-09-14”。
在 Postman 中,我在 PATCH
正文中发送:
{
"org_paymentreceived": "2019-09-15"
}
在 C# 程序中,我发送这个:
{
"org_paymentreceived": Convert.ToDateTime(payment)
}
在这两种情况下,很明显 2019-09-15
已通过,但在 CRM 中仍显示为 2019-09-14
。
Dynamics CRM 始终在后端 Datetime 字段中存储为 UTC,因此无论何时创建 Datetime 属性,请确保设置行为,如您希望的独立时区或默认情况下的用户本地行为。
否则,在用于 Web api 交互的特定用户帐户的个人选项下设置正确的时区设置,与您的用户群相同。
传递给 CRM 的本地日期时间将转换为 UTC 并存储。然后进行检索逆向工程。
CRM UI 将在该日期时间字段中呈现当前登录用户基于时区的值。而任何 SDK、web api 调用都会从数据库中获取 UTC 值。
基于@Arun Vinoth 的回答...
以下是我在 C# 中处理将 UTC 传递到 D365 的方法:
public class XrmDate
{
public DateTime Now() => DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc);
}
用法:
myEntity["myDate"] = new XrmDate().Now();
您还可以定义日期时间属性的行为,以在创建或更新字段时自动转换时间或不转换时间。
您可以通过简单地在字段级别禁用它来禁用 "Dynamics automatically calculates dates for you based on your local timezone"。因此,如果它对您的实例不重要(例如,如果您只在一个时区工作),则无需将其转换为 UTC 时间。
我在通过网络从 CRM 检索日期时间时遇到了问题 api。幸运的是格式化值具有正确的日期。
我正在尝试使用 Postman 或我拥有的 C# 程序向 CRM 发送日期。传递的日期是“2019-09-15”,但在 CRM 中显示时是“2019-09-14”。
在 Postman 中,我在 PATCH
正文中发送:
{
"org_paymentreceived": "2019-09-15"
}
在 C# 程序中,我发送这个:
{
"org_paymentreceived": Convert.ToDateTime(payment)
}
在这两种情况下,很明显 2019-09-15
已通过,但在 CRM 中仍显示为 2019-09-14
。
Dynamics CRM 始终在后端 Datetime 字段中存储为 UTC,因此无论何时创建 Datetime 属性,请确保设置行为,如您希望的独立时区或默认情况下的用户本地行为。
否则,在用于 Web api 交互的特定用户帐户的个人选项下设置正确的时区设置,与您的用户群相同。
传递给 CRM 的本地日期时间将转换为 UTC 并存储。然后进行检索逆向工程。
CRM UI 将在该日期时间字段中呈现当前登录用户基于时区的值。而任何 SDK、web api 调用都会从数据库中获取 UTC 值。
基于@Arun Vinoth 的回答...
以下是我在 C# 中处理将 UTC 传递到 D365 的方法:
public class XrmDate
{
public DateTime Now() => DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc);
}
用法:
myEntity["myDate"] = new XrmDate().Now();
您还可以定义日期时间属性的行为,以在创建或更新字段时自动转换时间或不转换时间。
您可以通过简单地在字段级别禁用它来禁用 "Dynamics automatically calculates dates for you based on your local timezone"。因此,如果它对您的实例不重要(例如,如果您只在一个时区工作),则无需将其转换为 UTC 时间。
我在通过网络从 CRM 检索日期时间时遇到了问题 api。幸运的是格式化值具有正确的日期。