获取经过一段时间(DateTime)的年,月,日

Venu GoPal

如何从日期时间选择器值将年龄显示为年,月,日。例如:

Datetimepicker value = #1/11/2014#
Today = #1/12/2015#.  

最终结果将为“ 1年0个月1天”。但是获得该结果不仅仅只是减去DateTime.Year值,等等。有人知道关于它的数学公式或数学计算吗?

普萨·庞杰伦德拉普

这是一个DateTimeSpan类型,它返回一个对象,如,TimeSpan表示两个日期之间经过的年,月,日。它遍历时间单位以递增时间单位,直到较小的日期与较大的日期匹配。然后将所得的增量返回到新DateTimeSpan对象中。

Public Structure DateTimeSpan

    Private _Years As Integer
    Public ReadOnly Property Years As Integer
        Get
            Return _Years
        End Get
    End Property

    Private _Months As Integer
    Public ReadOnly Property Months As Integer
        Get
            Return _Months
        End Get
    End Property

    Private _Days As Integer
    Public ReadOnly Property Days As Integer
        Get
            Return _Days
        End Get
    End Property

    Private _Hours As Integer
    Public ReadOnly Property Hours As Integer
        Get
            Return _Hours
        End Get
    End Property

    Private _Minutes As Integer
    Public ReadOnly Property Minutes As Integer
        Get
            Return _Minutes
        End Get
    End Property

    Private _Seconds As Integer
    Public ReadOnly Property Seconds As Integer
        Get
            Return _Seconds
        End Get
    End Property

    Private _MilliSeconds As Integer
    Public ReadOnly Property MilliSeconds As Integer
        Get
            Return _MilliSeconds
        End Get
    End Property

    ' the ctor for the result
    Private Sub New(y As Integer, mm As Integer, d As Integer,
                    h As Integer, m As Integer, s As Integer,
                    ms As Integer)
        _Years = y
        _Months = mm
        _Days = d
        _Hours = h
        _Minutes = m
        _Seconds = Seconds
        _MilliSeconds = ms
    End Sub

    ' private time unit tracker when counting
    Private Enum Unit
        Year
        Month
        Day
        Complete
    End Enum

    Public Shared Function DateSpan(dt1 As DateTime, 
                                    dt2 As DateTime) As DateTimeSpan
        ' we dont do negatives
        If dt2 < dt1 Then
            Dim tmp = dt1
            dt1 = dt2
            dt2 = tmp
        End If

        Dim thisDT As DateTime = dt1
        Dim years As Integer = 0
        Dim months As Integer = 0
        Dim days As Integer = 0

        Dim level As Unit = Unit.Year
        Dim span As New DateTimeSpan()

        While level <> Unit.Complete
            Select Case level
                ' add a year until it is larger;
                ' then change the "level" to month
                Case Unit.Year
                    If thisDT.AddYears(years + 1) > dt2 Then
                        level = Unit.Month
                        thisDT = thisDT.AddYears(years)
                    Else
                        years += 1
                    End If

                Case Unit.Month
                    If thisDT.AddMonths(months + 1) > dt2 Then
                        level = Unit.Day
                        thisDT = thisDT.AddMonths(months)
                    Else
                        months += 1
                    End If

                Case Unit.Day
                    If thisDT.AddDays(days + 1) > dt2 Then
                        thisDT = thisDT.AddDays(days)
                        Dim thisTS = dt2 - thisDT
                        ' create a new DTS from the values caluclated
                        span = New DateTimeSpan(years, months, days, thisTS.Hours,
                                                thisTS.Minutes, thisTS.Seconds,
                                    thisTS.Milliseconds)
                        level = Unit.Complete
                    Else
                        days += 1
                    End If
            End Select
        End While

        Return span

    End Function

End Structure

用法:

Dim dts As DateTimeSpan = DateTimeSpan.DateSpan(#2/11/2010#, #10/21/2013#)
Console.WriteLine("{0} Yrs, {1} Months and {2} Days",
                           dts.Years.ToString, dts.Months.ToString, dts.Days.ToString)

这将产生相同的结果:

Dim dtStart As DateTime = #2/11/2010#
Dim dtEnd As new DateTime(2013, 10, 21)
' this is NOT a date and wont work:
Dim myDt = "2/11/2010"             ' its a string!

Dim dts As DateTimeSpan = DateTimeSpan.DateSpan(dtEnd, dtStart)

结果: 3 Yrs, 8 Months and 10 Days

注意:
-它仅适用于适当的DateTime类型,不适用于看起来像日期的字符串。使用文字(#...#)或DateTime变量。使用a时DateTimePicker,请.Value不要使用.Text
-它不会做负值,所以传递的值顺序无关紧要
-在计算时,它会增加一个DateTime变量,因此,它应适当考虑leap日

这是基于我很久以前在博客中找到的一些C#代码(甚至可能来自SO答案或问题)。不能立即找到引用的原始内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python,如果条件是经过一段时间

来自分类Dev

经过一段时间或满足条件后运行代码

来自分类Dev

在C中经过一段时间后如何停止while循环

来自分类Dev

jQuery:经过一段时间后,子菜单才会出现并消失

来自分类Dev

经过一段时间后,是否有办法从流程中分离流程?

来自分类Dev

在Python中经过一段时间后,如何在循环中结束请求?

来自分类Dev

Javascript:经过一段时间后执行操作

来自分类Dev

经过一段时间后,运行需要sudo的命令

来自分类Dev

在php中经过一段时间后,会话会自动过期

来自分类Dev

在C中经过一段时间后如何停止一会儿循环

来自分类Dev

经过一段时间的机器学习训练后运行大型程序时出现分段错误

来自分类Dev

自上次在 tkinter 中按下按键后经过一段时间后调用函数

来自分类Dev

经过一段时间后,如何一个接一个地启用布尔值?

来自分类Dev

如何在 ReactJS 中经过一段时间后从一个屏幕切换到另一个屏幕?

来自分类Dev

如何在经过一段时间后重设数据库值ASP.NET MVC C#

来自分类Dev

SocketException:连接尝试失败,因为经过一段时间在Windows 7 SP 1上被连接方未正确响应

来自分类Dev

在tkinter窗口中已显示的旧图像下,经过一段时间的延迟后如何显示新图像?

来自分类Dev

如何在经过一段时间后重设数据库值ASP.NET MVC C#

来自分类Dev

Android小部件过一段时间后会停止工作吗?

来自分类Dev

在Android Studio中过一段时间后隐藏活动中的按钮

来自分类Dev

如何在Chartjs中跳过一段时间的数据/标签?

来自分类Dev

为什么Outlook会用蓝色的花体突出显示“过一段时间”?

来自分类Dev

使用DatePeriod和DateInterval获取一段时间内的某些工作日

来自分类Dev

如果getdate()已过一段时间,则显示一个字符串

来自分类Dev

将数据保存到内存中,过一段时间后将其保存到数据库中

来自分类Dev

为了防止我的网站过一段时间冻结,我该怎么办

来自分类Dev

Android LocationListener一段时间

来自分类Dev

一段时间后翻转

来自分类Dev

暂停CCNode一段时间

Related 相关文章

  1. 1

    Python,如果条件是经过一段时间

  2. 2

    经过一段时间或满足条件后运行代码

  3. 3

    在C中经过一段时间后如何停止while循环

  4. 4

    jQuery:经过一段时间后,子菜单才会出现并消失

  5. 5

    经过一段时间后,是否有办法从流程中分离流程?

  6. 6

    在Python中经过一段时间后,如何在循环中结束请求?

  7. 7

    Javascript:经过一段时间后执行操作

  8. 8

    经过一段时间后,运行需要sudo的命令

  9. 9

    在php中经过一段时间后,会话会自动过期

  10. 10

    在C中经过一段时间后如何停止一会儿循环

  11. 11

    经过一段时间的机器学习训练后运行大型程序时出现分段错误

  12. 12

    自上次在 tkinter 中按下按键后经过一段时间后调用函数

  13. 13

    经过一段时间后,如何一个接一个地启用布尔值?

  14. 14

    如何在 ReactJS 中经过一段时间后从一个屏幕切换到另一个屏幕?

  15. 15

    如何在经过一段时间后重设数据库值ASP.NET MVC C#

  16. 16

    SocketException:连接尝试失败,因为经过一段时间在Windows 7 SP 1上被连接方未正确响应

  17. 17

    在tkinter窗口中已显示的旧图像下,经过一段时间的延迟后如何显示新图像?

  18. 18

    如何在经过一段时间后重设数据库值ASP.NET MVC C#

  19. 19

    Android小部件过一段时间后会停止工作吗?

  20. 20

    在Android Studio中过一段时间后隐藏活动中的按钮

  21. 21

    如何在Chartjs中跳过一段时间的数据/标签?

  22. 22

    为什么Outlook会用蓝色的花体突出显示“过一段时间”?

  23. 23

    使用DatePeriod和DateInterval获取一段时间内的某些工作日

  24. 24

    如果getdate()已过一段时间,则显示一个字符串

  25. 25

    将数据保存到内存中,过一段时间后将其保存到数据库中

  26. 26

    为了防止我的网站过一段时间冻结,我该怎么办

  27. 27

    Android LocationListener一段时间

  28. 28

    一段时间后翻转

  29. 29

    暂停CCNode一段时间

热门标签

归档