【问题标题】:GregorianCalendar last year day of the weekGregorianCalendar 一周中的最后一天
【发布时间】:2015-02-17 22:27:27
【问题描述】:

我有一个 Excel 表,其中包含 2003 年的列日期(格式:2015/02/10)和列销售。我想提取(去年,本周,今天的名称)销售数字。就像今天是 2 月 12 日星期四一样,去年的“星期四”是 2 月 13 日。 我已经在下面尝试了我的代码,但我收到错误“无法将字符串“Thursday”转换为双倍”任何想法如何?谢谢

 Dim MyCalendar As Calendar = New GregorianCalendar
    Dim culture = New System.Globalization.CultureInfo("EN-US")
    dim eventcal as new datatable
    Dim dayname As String = culture.DateTimeFormat.GetDayName(Now.DayOfWeek)

    Dim lastCurrentweek = MyCalendar.GetWeekOfYear(
      Now,
      CalendarWeekRule.FirstFourDayWeek,
      DayOfWeek.Sunday)
    Dim lastCurrentyear = MyCalendar.GetYear(Now) - 1
        dim dayrecord = (From Row In eventcal.AsEnumerable
           Where MyCalendar.GetWeekOfYear(Row.Field(Of DateTime)("date"),
           CalendarWeekRule.FirstFourDayWeek,
            DayOfWeek.Sunday) = Currentweek And MyCalendar.GetYear(Row.Field(Of DateTime)("date")) = lastCurrentyear And MyCalendar.GetDayOfWeek(Row.Field(Of DateTime)("date")) = dayname
           Select Row.Field(Of Double)("sales"))

【问题讨论】:

  • 如果我们是 2015 年 2 月 1 日怎么办?去年没有对应的星期六。
  • 这类比较通常以 WeekOfYear 为基础,不考虑月份

标签: c# vb.net excel


【解决方案1】:

可能感兴趣的人,这是您如何获得与去年或前一年的今天相同的信息。感谢 tommytwotrain 提供此解决方案

Private Function Date2Weekday(ByVal d As Date, ByVal y As Integer) As Date
    'determine week
    Dim weekNumber As Integer = Math.Ceiling(d.Day / 7)
    'determine day number
    Dim daynumber1 As Integer = Weekday(d)
    'determine target first day of month
    Dim targetDay1 As Date = New DateTime(y, d.Month, 1)
    Dim targetDay1Number As Integer = Weekday(targetDay1)
    Dim dt As Integer = (weekNumber * 7) + (daynumber1 - targetDay1Number)+1
    If dt > weekNumber * 7 Then dt -= 7
 Date2Weekday = New DateTime(y, d.Month, dt)     
 End Function

Private Function salescalendar(ByVal dtduty As DataTable) As DataTable
   Dim eventcal As New DataTable
    Dim lastyear = MyCalendar.GetYear(Now) - 1
    Dim todays As Date = Now.Date
 Dim dayrecord = (From Row In eventcal.AsEnumerable
                 Where Row.Field(Of DateTime)("date") = Date2Weekday(todays, lastyear)
                Select Row.Field(Of Double)("sales")) 
  end function

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 2014-03-08
    • 2017-07-21
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多