Tag: datetime

如何正确地将日期转换为UTC,然后将其转换回来?

我正在努力将DateTime转换为UTC,这个概念以及所有我无法正确理解的东西。 当我得到一个日期时间字符串,比如说“7/10/2013”​​,我就是这样做的 Convert.ToDateTime(“7/10/2013”).ToUniversalTime(); 这将在数​​据库中将其记录为“7/10/2013 4:00:00 AM ”。 服务器位于美国东海岸(-5)。 当然,在2013年7月期间,DST仍然被观察到,因此在此期间的偏移是-4,这样额外的4小时4:00:00 AM “记录为UTC。 当我写这篇文章时,它是2014年2月,DST没有生效,所以现在偏移是-5。 在我的应用程序中,这是我在我的应用程序中选择的偏移量。 如果我将-5偏移应用于“ 7/10 / 2013 4:00:00 AM ”,则日期将为“ 7/09/2013 11:00:00 PM ”。 哪一天是错的,一天就关闭了。 问题#1 那么如何才能正确转换UTC时间呢? 这意味着,当用户现在在2014年2月加载我的应用程序时(当前时区偏移-5),2013年7月10日凌晨4:00:00应该仍然是2013年7月10日,而不是7/09/2013。 令我困惑的是,因为.ToUniversalTime()考虑了服务器DST,是否存在一个硬盘“通用时间”,它不受服务器所在位置的影响? 问题2 当我在西海岸和东海岸都有服务器写入数据库时​​会发生什么? 如果记录的UTC时间是基于东海岸或西海岸,应用程序如何判断? 基本上,代码怎么说,“7/10/2013 4:00:00 AM”是在东海岸创建的UTC时间(表示美国东海岸的7/10/2013 00:00:00 AM)和不是西海岸的服务器(这表明它是美国西海岸的7/09/2013 20:00:00 pm)? 对不起,如果这听起来很愚蠢。 任何建议表示赞赏。 ==========最终编辑,我目前的解决方案=============== MiMo的答案是有道理的。 我对两件事感到困惑。 UTC时间存储在数据库中意味着什么? 服务器的时间与应用程序用户的关系是什么? 我的应用程序可以被来自不同时区的用户使用,有些用户与服务器位于同一时区,有些则不是。 有些旅行,所以即使它们与服务器位于同一时区,它们也可能一直落在不同的时区。 我的应用程序允许他们选择他们所在的时区,并适当地反映时间。 最初,我只是从数据库中获取UTC时间并从中减去用户的时区偏移量。 正如Mimo所说,这是错误的。 原因可以在上面的post中看到。 我最初的解决方案是立即获取服务器的时区偏移并使用它来加入/减去UTC,这也是错误的。 截至2013年7月10日,当时服务器的偏移量为-4。 目前,在2014年2月,服务器时区偏移为-5。 […]

如何使DateTime独立于当前的文化?

我想尝试将日期时间转换为字符串并返回,但要使其适用于所有文化。 我基本上有一个Textbox(tbDateTime)和一个标签(lbDateTime)。 标签告诉用户,软件期望输入tbDateTime的格式。 Textbox的输入将用于MySQL命令。 目前它的工作原理如下: lbDateTime.Text = “DD.MM.YYYY hh:mm:ss”; // I live in germany DateTime date = Convert.ToDateTime(tbDateTime.Text); String filter = date.ToString(“yyyy-MM-dd HH:mm:ss”); 现在我的问题: 是否可以根据当前文化确定lbDateTime.Text的格式字符串? Convert.ToDateTime函数使用哪种格式? 我希望你能帮助我。 我实际上没有电脑来测试不同的文化,所以我非常害怕我做错了什么。

将LDAP中的WhenChanged属性(Generalized-Time)转换为C#中的DateTime

我最近从使用S.DS命名空间(使用ADSI)切换到S.SD.Protocol命名空间。 唯一的问题是ADSI为我处理了Generalized-Time到DateTime的转换。 现在我为WhenChanged属性取回了值“20070828085401.0Z”。 DateTime.Parse()不会转换它,所以有另一种方式吗?

字符串变量名称日期在调试器中很奇怪

有人能告诉我为什么调试器将名为Date string变量处理为DateTime对象? 码: public class HourRegistration { public string Date { get; set; } } 看屏幕截图: 使用.NET Framework 4.5,VS-2015 谢谢! 更新: 通过将代码减少到最小可能,我发现了明显的问题。 最小化代码: namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DoSomething(); } public static void DoSomething() { DateTime Date = DateTime.ParseExact(“asdasd”, “dd/MM/yyyy”, CultureInfo.InvariantCulture); } public class HourRegistration { public string Date […]

在LINQ查询中无时间返回日期

我正在编写一个查询,我想计算我们的呼叫中心按日期联系的次数。 看起来很简单,但由于联系日期字段是日期时间字段,我得到时间,所以当我按联系日期(时间)分组时,每个联系日期实例的计数都为’1’。 所以,我想在没有时间的情况下按日期分组。 下面是我用来查询数据库的表达式: MyDataContext db = new MyDataContext(); var items = (from h in db.ContactHistories group h by h.contact_dt into g orderby g.Key select new { contact_dt = g.Key, item_count = g.Count() }).Take(50); 我试过用 h.contact_dt.ToShortDateString() 但这不起作用,因为SQL确实知道ToShortDateString()。 任何想法都非常感谢。 谢谢! 编辑: .Take(50)用于限制我获得的记录数量,直到我添加日期选择器和where子句,因此我没有获得所有400K记录。 ;)

C#和JavaScript之间Timespan差异的解释

这基于自1970年以来的计算毫秒数,C#产生的日期不同于 Javascript Date.getTime()的 JavaScript和C#版本 。 对于所有这些计算,假设它们在中央标准时间内完成,因此比UTC低6小时(此偏移将在稍后再次出现)。 据我所知,JavaScript Date对象基于Unix Epoch(1970年1月1日午夜)。 所以,如果我这样做: //remember that JS months are 0-indexed, so February == 1 var d = new Date(2014,1,28); d.getTime(); 我的输出将是: 1393567200000 这表示自Unix Epoch以来的毫秒数。 这一切都很好。 在链接的问题中,人们要求将此function转换为C#,而“天真”的实现通常看起来像这样: //the date of interest in UTC DateTime e = new DateTime(2014, 2, 28, 0, 0, 0, DateTimeKind.Utc); //the Unix Epoch DateTime s = […]

将DateTime转换为字符串

我想将DateTime转换为String 。 检查以下代码。 namespace TestDateConvertion { class Program { static void Main(string[] args) { object value = new DateTime(2003,12,23,6,22,30); DateTime result = (DateTime)value; Console.WriteLine(result.ToString(“dd/MM/yyyy”)); Console.ReadLine(); } } } 我已将系统日期格式更改为Faeroese。 我得到的输出为 23-12-2013 我应该如何获得输出? 23/12/2013 并考虑另一种情况,假设我有一个Customculture Info,我想将我的日期转换为我的自定义文化,我之前做的是如下, string.Format(customCulture, “{0:G}”, result); 现在如何使用customCulture在字符串中获取日期时间,它不应该依赖于系统DateTime?

仅在数据库中存储日期而不是时间部分C#

我有一个测试类和一个ExecutionDate属性,它只存储日期,但是当我们使用[DataType(DataType.Date)] ,它也将时间部分存储在数据库中,但我只想要日期部分。 public class Test { [Key] public int Id { get; set; } [DataType(DataType.Date)] public DateTime ExecutionDate { get; set; } } 有没有办法只使用Entity Framework在db中存储日期时间部分? 请帮我…. 我在使用[DataType(DataType.Date)]时添加了快照,它存储时间部分00:00我要删除它

DateTime.Ticks,DateTime.Equals和timezones

为什么以下代码(在C#中)返回false: DateTime d = DateTime.Now; d.Ticks == d.ToUniversalTime().Ticks; // false 我希望DateTime的滴答基于UTC时间。 DateTime.Ticks上的MSDN页面提到了 此属性的值表示自0001年1月1日午夜12:00:00起经过的100纳秒间隔的数量,表示DateTime.MinValue。 它不包括可归因于闰秒的刻度数。 1月1日午夜,0001 ..在哪个时区? 为什么DateTime.Ticks会依赖于时区? 我猜Ticks不同的事实是下面的代码也返回false的原因 DateTime d = DateTime.Now; d == d.ToUniversalTime(); // false DateTime.Equals上的MSDN文档提到 如果Ticks属性值相等,则t1和t2相等。 他们的Kind属性值不在平等测试中考虑。 我的期望是,无论时区如何,DateTime.Ticks都是平等的。 无论发生在什么时区,我都希望有两个时刻能够平等。 我的期望错了吗?

获得两个值之间的时差

在我的应用程序中,我有4个TextBoxes和2个TextBoxes来输入开始时间,2个TextBoxes来输入end-time。 用户将始终输入完成的时间,因此输入将始终为11:30,12:45,依此类推。 如何在开始和结束时间之间获得小时和分钟的差异?