【问题标题】:Check for next day第二天检查
【发布时间】:2015-10-11 23:22:00
【问题描述】:

我正在尝试创建一个售票柜台,基本上是在用户单击按钮时,即。创建工单时,计数器将加 1,直到第二天工单计数器将再次重置为 0。

我已将计数器存储在数据库中,因此数据库知道特定用户的最后一个计数器。但是,一旦用户第二天单击按钮,我如何将计数器重置回 0。我有一个名为 checkformidnight 的函数,如下所示,但不认为这是正确的方法。

Private Function CreatTicketNumber(ByVal officerId As Integer) As String

    Dim counter As Integer = officer.Officer_Ticket_Counter '' from database
    If IsMidnight(Now) Then
        counter = 0
    Else
        counter = counter + 1
    End If


    Dim TicketNumber As String = counter.ToString("00")

    Return TicketNumber
End Function


Public Function IsMidnight(ByVal value As Date) As Boolean
    Return value.TimeOfDay.Ticks = 0
End Function

【问题讨论】:

  • 您可能不想要 C# 标签。我留下了它,所以你可以看看它是怎么回事
  • 您可能需要将其存储在某个地方,以便在程序关闭时检索它并稍后对其进行修改。
  • 请详细说明您的问题

标签: .net vb.net


【解决方案1】:

在基本模式下,您可以这样做:

1) 在设置中存储(例如)应用程序加载的日期。这样,您就有了当前日期:

    My.Settings.LoadDate = Datetime.Now.Tostring
    My.Settings.Save

2) 使用 BackgroundWorker 并将以下代码放入:

Do
  Dim LastDate as datetime = cdate(my.settings.LoadDate)
  if datetime.now.date > LastDate
    Counter = 0
    My.Settings.LoadDate = Datetime.Now.Tostring
    My.Settings.Save
  end if
Sleep(1200)

3) 这样,您将有一个不同的线程每 1.2 秒检查一次当前日期。如果今天过了日期,您将重置设置中的日期并重置您的计数器。

4) 这段代码可能会优化,但基本上可以解决你的问题。

【讨论】:

    【解决方案2】:

    DateTime.Today.DayOfWeek 值与您的计数器一起存储在表单级别。在 Form 的 Load() 事件中,设置该变量。现在,每当单击 Button 时检查它并相应地重置:

    Public Class Form1
    
        Private i As Integer = 0
        Private LastDayOfWeek As DayOfWeek
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            LastDayOfWeek = DateTime.Today.DayOfWeek
            Label1.Text = i
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If DateTime.Today.DayOfWeek = LastDayOfWeek Then
                i = i + 1
            Else
                i = 0
                LastDayOfWeek = DateTime.Today.DayOfWeek
            End If
            Label1.Text = i
        End Sub
    
    End Class
    

    【讨论】:

    • *我发帖后你对原问题的改动很大,但思路还是一样。
    • 非常感谢,我第一次使用stackoverflow。
    【解决方案3】:

    定义一个检查 DateTime.Now 的计时器,每当日期组件发生变化时,重置计数器

    Dim time As DateTime = DateTime.Now
    Dim count = 0L
    
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'you can use settings to store and restore data
        If File.Exists("date") Then time = DateTime.FromBinary(Long.Parse(File.ReadAllText("date")))
        If File.Exists("count") Then count = Long.Parse(File.ReadAllText("count"))
    
        Dim t = New Timer
        t.Interval = 1000 ' one second
        t.Enabled = True
        t.Start()
    
    
        AddHandler t.Tick, Sub(ss As Object, ee As EventArgs)
                               If DateTime.Now.Day > time.Day Then
                                   count = 0
                               End If
                               time = DateTime.Now
                           End Sub
        AddHandler FormClosing, Sub(ss As Object, ee As FormClosingEventArgs)
                                    File.WriteAllText("date", time.Ticks.ToString())
                                    File.WriteAllText("count", count.ToString())
                                End Sub
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 2012-10-08
      • 2018-07-04
      相关资源
      最近更新 更多