考虑以下两种情况:场景1).今天是2012年5月1日,场景2).今天是2012年9月1日.
现在,请考虑我们在我们的网页上写下以下关于某人留下的评论:"此评论写于3个月和12天前".即使声明完全相同,这两种情况下的天数也总是不同.在情景1中,"3个月和12天"将相等102 days
.但是,在场景2中,"3个月和12天"将是104 days
!
现在,谈谈我的观点,让我们使用一个不同的例子,并说有人在2013年1月30日在我们的网站上发表评论,今天是2013年3月10日.我们真实的TimeSpan对象需要知道这个相对日期,并且可以计算出来以下内容:
因此,这意味着10天+ 1天+ 1个月总计,转换为This comment was posted 1 Month and 11 Days ago
.
现在,如果您使用MS样式TimeSpan对象(或任何语言的任何TimeSpan对象),它将为您提供从1月30日到3月10日(39天)的天数,并且因为TimeSpan对象不存储相对日期(我们减去获得TimeSpan的基数/初始日期),如果你问它有多少个月和几天,它会假设一个月内有30天,甚至最差,大于30天的平均值,并在几天内返回其余的,所以要到39天,它会告诉你它是1个月和9天,你会收到This comment was posted 1 Month and 9 Days ago
消息.请记住,这两种情况都具有相同的开始日期和相同的当前/结束日期,是的Microsoft TimeSpan对象,不允许我们告诉它应该考虑2013年2月,给了我们一个完全不同的TimeSpan,关闭整整2天.它实际上对我们撒了谎.
问题是,人们会相信这一点,谁知道他们可能有什么看法,他们对过去的看法如何改变,以及他们在尝试重建过去内部事件时可能做出的决定和生活选择,而从不注意或理解代表时间的缺点和固有的失败,这在当今无处不在.他们不会理解编程语言没有实现(或关心)上个月有31天,反对30,29或28 - 反之亦然,并且当你增加TimeSpan时这会增加.
这是这篇文章的核心问题.我知道大多数人都不会关心这种差异(但要确保我们有些人这样做,并且不能背负这种差异),如果这不打扰你,那没关系.我希望它不会打扰我,我会节省一些时间,压力和失望.如果这不是一个麻烦,您可以使用该功能有效地文本显示相对时间(可定制为从几秒到几年的1到6个节点),而不是使用它提供的通常可忽略的精度.
令我失望的是,我注意到没有真正的时间跨度对象,如果你得到一个时间跨度,做一个.years
或.months
你什么也得不到,你只会得到.days
和降低,因为timeSpan对象没有任何东西告诉它哪个月或者年份是什么时候创建的.因此,它永远不会真正知道自每个月的日子在一年内变化多少个月甚至是闰年的变化.
为此,我将发布一个我开发的函数,以获得准确的读数,并能够在我的ASP.NET网页上返回如下内容......
发表于4年,3个月,14天,15小时,18分钟和24秒之前
我想有一个......
timeSpan.GetActualNumberOf[Months/Days/Hours/etc]
(当然必须提供基准日期)
...此数据类型的类型方法,但没有.
所有你真的需要做的是在时间跨度对象上创建另一个属性给它上计算出的差异,那么上面可爱的字符串将是可计算很容易地和一个基准日.year
及.month
会存在!
更新:我已经大大扩展并更新了我在下面的答案中的官方答案和代码使用细节,100%工作答案和代码(完整),准确和准确的相对时间/日期,没有近似值 - 谢谢.
我想知道在给定开始和结束日期时,如何检索两个日期之间的月份和年份.
例如:Start Date: '1/1/2011'(mm/dd/yyyy)
和End date :'11/30/2011'
.要检索的月份和年份是January,2011; February,2011; March,2011; and so on till November,2011
我有以下代码片段用于获取两个日期之间的各个日期:
DateTime[] output = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
.Select(offset => startDate.AddDays(offset))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
但是,以下部分
endDate.Subtract(startDate).Days
Run Code Online (Sandbox Code Playgroud)
没有.Months返回日期范围内的月份.
例如,如果我提供2010年1月1日和2010年6月1日,我希望返回2010年1月1日,2010年2月1日,2010年3月1日,2010年4月1日,5/1/2010年和2010年6月1日.
有任何想法吗?
我想知道如何计算两个日期之间的月数.有没有什么方法可以在C#中计算它?
Eg1. Date1 = "2011/11/01"
Date2 = "2012/02/01"
Result. Numbers of Month =3
Eg2. Date1 = "2012/01/31"
Date2 = "2012/02/01"
Result. Numbers of Month =1
Eg3. Date1 = "2012/01/01"
Date2 = "2012/02/28"
Result. Numbers of Month =1
Run Code Online (Sandbox Code Playgroud) 我有两个日期第一个是nowDate {12/20/2014 5:19:31 PM}
第二个是messageTime {12/20/2014 1:14:12 PM}
我想比较这些日期并计算结果并显示给用户,它计算现在时间和消息日期之间的时差我的代码是
// Last Message Time
DateTime messageTime = Convert.ToDateTime(lastMessageTime);
int msgYear = messageTime.Year;
int msgMonth = messageTime.Month;
int msgDay = messageTime.Day;
int msgHour = messageTime.Hour;
int msgMinute = messageTime.Minute;
//Current Date Time
DateTime nowDate = DateTime.Now;
// TimeSpan difference = nowDate.Subtract(messageTime);
int nowYear = nowDate.Year;
int nowMonth = nowDate.Month;
int nowDay = nowDate.Day;
int nowHour = nowDate.Hour;
int nowMinute = nowDate.Minute;
if (msgYear == nowYear)
{
if (msgMonth == nowMonth) …
Run Code Online (Sandbox Code Playgroud)