我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
我有一个对象,其目前的属性为DateTime.
该对象在一个时间范围内被标记为有效.默认值为00:00:00至23:59:59
用户在UI中输入值,并通过以下方式设置属性:
new DateTime(DateTime.Now.Year,
DateTime.Now.Month,
DateTime.Now.Day,
model.Hours,
model.Minutes,
model.Seconds)
Run Code Online (Sandbox Code Playgroud)
然后在它到达数据库时将其转换为UTC.
今天的日期是2013年8月29日.如果印度的同事运行此程序,它将在2013年8月28日18:30:00将数据存储在数据库中,因为它们比UTC早5.5小时,因此2013年8月29日00:00:00变为昨天.
当逻辑尝试确定对象是否有效时,逻辑是:
if (DateTime.UtcNow.TimeOfDay > model.MyPropertyFromDB.TimeOfDay)
Run Code Online (Sandbox Code Playgroud)
我们正在尝试确定当前时间是否在00:00:00和23:59:59之间
这是因为14:00(当前时间)不大于18:30
什么是比较时间的最佳方法?
将值存储为DateTimeOffSet帮助,是否使用ToLocal()确定?
其他考虑因素是印度的用户正在使用在英国托管的应用程序,因此需要了解时区.
谢谢
我的应用程序正在运行时区为UTC+05:30 的服务器。我的客户端机器有UTC-05:00时区。
现在假设他进入1989年12月31日在一个文本框,并保存表单,当他在剑道网查看详细的日期显示为1989年12月30日,而不是1989年12月31日。
我通过更改电脑的时区来调试应用程序,在调试中我发现
C#
public ActionResult GetPatients([DataSourceRequest] DataSourceRequest request, int includePatientId = 0)
{
return Json(this.patienModel.RetrieveActivePatients().ToDataSourceResult(request));
}
Run Code Online (Sandbox Code Playgroud)
剑道格子
@(Html.Kendo().Grid<RxConnectEntities.Patient>
().Name("PatientList")
.Columns(columns =>
{
columns.Bound(p => p.PatientID).Visible(false);
columns.Bound(p => p.Name).Width(100);
columns.Bound(p => p.Gender).Width(80);
columns.Bound(p => p.DateOfBirth).Width(90)
.Format("{0:MM/dd/yyyy}")
.EditorTemplateName("DateOfBirth")
.Filterable(false).HtmlAttributes(new { id = "gridDateOfBirth" })
.ClientTemplate("#: kendo.toString(kendo.parseDate(data.DateOfBirth),'MM/dd/yyyy') #");
columns.Bound(p => p.PhoneNumber).Title("Phone Number").Width(110);
columns.Command(command =>
{
command.Custom("Select").Click("OnSelectRow");
command.Custom("Edit").Text("Edit").Click("EditGrid"); …Run Code Online (Sandbox Code Playgroud) 我有一些类似的代码:
[HttpGet("SearchStuff")]
public IActionResult SearchStuff([FromQuery]DateTime from, [FromQuery]DateTime to)
Run Code Online (Sandbox Code Playgroud)
我想确保我收到的 UTC 格式如下: 如果指定了时区,则转换为 UTC 如果未指定时区,则假定 UTC 并指定为 UTC
我尝试像这样从客户端发送 utc(客户端在本地时间工作),它的格式符合我的预期,但不幸的是服务器端的日期时间被转换为服务器的本地时间。如果我使用 ToString("s") 服务器会收到正确的日期时间值,但不幸的是 DatetimeKind.Unspecified:
protected string Format(DateTime t)
{
return t.ToUniversalTime().ToString("o");
}
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×2
c# ×2
datetime ×2
.net ×1
asp.net-core ×1
dst ×1
kendo-grid ×1
kendo-ui ×1
sql-server ×1
timezone ×1
utc ×1