我希望能够将这个问题及其答案作为处理夏令时的权威指南,特别是处理实际的变更问题.
如果您有任何要添加的内容,请执行此操作
许多系统依赖于保持准确的时间,问题在于由于夏令时改变时间 - 向前或向后移动时钟.
例如,在订单获取系统中有一个业务规则取决于订单的时间 - 如果时钟发生变化,规则可能不那么明确.如何保持订单的时间?当然有无数的场景 - 这只是一个说明性的场景.
同样重要的是,如果不是这样的话:
我会对编程,操作系统,数据持久性和该问题的其他相关方面感兴趣.
一般答案很好,但我也希望看到细节,特别是如果它们只在一个平台上可用.
我将特定时区的日期时间作为字符串,我想将其转换为本地时间.但是,我不知道如何在Date对象中设置时区.
例如,Feb 28 2013 7:00 PM ET,我可以
var mydate = new Date();
mydate.setFullYear(2013);
mydate.setMonth(02);
mydate.setDate(28);
mydate.setHours(7);
mydate.setMinutes(00);
Run Code Online (Sandbox Code Playgroud)
据我所知,我可以设置UTC时间或本地时间.但是,我如何在另一个时区设置时间?
我试图使用添加/减去UTC的偏移量,但我不知道如何应对夏令时.我不确定我是否正朝着正确的方向前进.
如何在javascript中将时间从不同的时区转换为当地时间?
是否有可能拥有实体框架(我目前使用的是Code First Approach with CTP5)将所有DateTime值存储为数据库中的UTC?
或者是否有一种方法可以在映射中指定它,例如在last_login列的这一个中:
modelBuilder.Entity<User>().Property(x => x.Id).HasColumnName("id");
modelBuilder.Entity<User>().Property(x => x.IsAdmin).HasColumnName("admin");
modelBuilder.Entity<User>().Property(x => x.IsEnabled).HasColumnName("enabled");
modelBuilder.Entity<User>().Property(x => x.PasswordHash).HasColumnName("password_hash");
modelBuilder.Entity<User>().Property(x => x.LastLogin).HasColumnName("last_login");
Run Code Online (Sandbox Code Playgroud) 我通常有一个"拦截器",它在从/向数据库读取/写入之前进行DateTime转换(从UTC到本地时间,从本地时间到UTC),因此我可以DateTime.Now在整个系统中使用(派生和比较)而不用担心关于时区.
关于计算机之间的序列化和移动数据,没有必要打扰,因为日期时间始终是UTC.
我应该继续以UTC格式存储我的日期(SQL 2008 - datetime)还是应该使用DateTimeOffset(SQL 2008-datetimeoffset)存储它?
数据库中的UTC日期(日期时间类型)已经工作并且已知很长时间了,为什么要更改它?有什么好处?
我已经看过像这样的文章了,但我并不是100%相信.有什么想法吗?
几个月前,我被介绍到新型DateTimeOffset,很高兴DateTime关于时区的缺陷终于得到了解决.
但是,我想知道使用这种新类型是否有任何开销或问题.
我在一个多语言环境的Web应用程序上工作.有没有人知道任何可以影响我的东西,只是在我的所有日期/时间工作中使用它?这里有滥用的窗口吗?
参考:DateTimeOffset:Justin Van Patten在.NET 3.5中的一个新的DateTime结构
如何在SQL中提取DateTime字段的时间部分?对于我的项目,无论日期是什么,我都必须返回DateTime字段的时间戳为5pm的数据
我刚刚注意到与DateTime比较似乎是一个荒谬的缺陷.
DateTime d = DateTime.Now;
DateTime dUtc = d.ToUniversalTime();
d == dUtc; // false
d.Equals(dUtc); //false
DateTime.Compare(d, dUtc) == 0; // false
Run Code Online (Sandbox Code Playgroud)
似乎DateTimes上的所有比较操作都无法执行任何类型的智能转换(如果一个是DateTimeKind.Local,一个是DateTimeKind.UTC).除了始终将比较中涉及的两者都转换为utc时间之外,这是一种更好的方法来可靠地比较DateTimes吗?
a DateTime和DateTimeOffset对象有什么区别?
什么时候应该使用每一个?
在可能更改服务器区域的Web应用程序中,存储日期和时间.哪一个更好,还是有其他建议?
我们的应用程序旨在处理来自不同地理位置的用户.
我们无法检测当前最终用户当地时间和时区对其进行操作的情况.他们选择不同的文化,如sv-se,en-us,ta-In甚至他们从欧洲/伦敦时区访问..
我们在美国托管服务器托管它,应用程序用户来自 Norway/Denmark/Sweden/UK/USA/India
问题是我们用来DateTime.Now存储记录创建/更新日期等.
由于服务器在美国运行,所有用户数据都保存为美国时间:(
在SO中进行研究后,我们决定将所有历史日期存储在DB中 DateTime.UtcNow
问题:

创建了一条记录29 Dec 2013, 3:15 P.M Swedish time.
public ActionResult Save(BookingViewModel model)
{
Booking booking = new Booking();
booking.BookingDateTime = model.BookingDateTime; //10 Jan 2014 2:00 P.M
booking.Name = model.Name;
booking.CurrentUserId = (User)Session["currentUser"].UserId;
//USA Server runs in Pacific Time Zone, UTC-08:00
booking.CreatedDateTime = DateTime.UtcNow; //29 Dec 2013, 6:15 A.M
BookingRepository.Save(booking);
return View("Index");
}
Run Code Online (Sandbox Code Playgroud)
我们希望向在India/Sweden/USA登录的用户显示相同的历史记录时间.
截至目前,我们正在使用当前文化用户登录并从配置文件中选择时区并使用TimeZoneInfo类进行转换
<appSettings>
<add key="sv-se" value="W. Europe Standard Time" />
<add key="ta-IN" value="India Standard …Run Code Online (Sandbox Code Playgroud) 我需要帮助将a转换DateTime为特定的时区.我下面的内容不能正常工作.
gmTime = 03/02/2013 1:00:00 AM
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var time = timeZoneInfo.ConvertTime(gmTime, timeZone);
Run Code Online (Sandbox Code Playgroud)
当我调试time应该在03/01/2013 8:00:00 PM应用区域时的值时,它会返回为03/02/2013 1:00:00 AM.
如果我这样做,time.ToLocalTime()那么我得到正确的值.但是,我需要转换time为不同的时区.
datetime ×6
c# ×5
timezone ×3
.net ×2
sql ×2
sql-server ×2
t-sql ×2
utc ×2
.net-4.0 ×1
asp.net ×1
code-first ×1
dst ×1
javascript ×1
nodatime ×1