2013-09-26 28 views
5

Nel mio codice qui sotto, come faccio a impostare arrivaldate e depaturedate in modo da poter ottenere un importo dovuto? Devo organizzarli come giorni di permanenza in hotel, quindi posso inventare un totale. Se questo ha senso? Sto usando datetimepickers in Visual Basic.Come trovare il numero di giorni tra due date/DateTimePickers

oggetti
Public Class RentalForm 
    'declare constants 
    Const tax_rate_decimal As Decimal = 12.25D 
    Const king_price_decimal As Decimal = 110.9D 
    Const queen_price_decimal As Decimal = 105.9D 
    Const double_price_decimal As Decimal = 95.9D 

    'declare variables 
    Private roomchargesumdecimal, taxamountsumdecimal, amountduesumdecimal As Decimal 

    Private Sub exitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitButton.Click 
     Close() 
    End Sub 

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxnameofguest.TextChanged 

    End Sub 

    Private Sub calculateButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calculateButton.Click 
     'dimension local variables 
     Dim numberofguestsinteger As Integer 
     Dim roomchargedecimal, taxamountdecimal, amountduedecimal, taxratedecimal As Integer 
     Dim arrivaldate, departuredate As Date 

     Try 
      'dates 
      arrivaldate = Now 

      'convert quantity to numeric 
      numberofguestsinteger = Integer.Parse(TextBoxNumberofguests.Text) 

      'calculate values for single person 
      roomchargedecimal = numberofguestsinteger * (arrivaldate + departuredate) 
      taxratedecimal = roomchargedecimal * tax_rate_decimal 

     Catch ex As Exception 

     End Try 

    End Sub 

    Private Sub DateTimePickerarrivaldate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePickerarrivaldate.ValueChanged 

    End Sub 

    Private Sub Label16averagelengthofstay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label16averagelengthofstay.Click 


    End Sub 

    Private Sub RentalForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 
End Class    
+0

Possibile duplicato di [Calcolare la differenza tra due date (numero di giorni)?] (Https://stackoverflow.com/questions/1607336/calculate-difference- between-two-dates-number-of-days) –

risposta

2

DateTimePicker hanno un Value property, che vi darà un DateTime per ciascuno. È possibile ottenere la differenza di due oggetti DateTime sottraendo l'uno dall'altro.

P.S. Non mangiare tutte le eccezioni del genere. Non è cool.

15

DateTime matematica può essere fonte di confusione in un primo momento. Ma in realtà non importa se sono DateTimePicker controlli o variabili perché myDateTimePicker.Valueè un DateTime tipo. Quindi, è possibile combinare le variabili ei controlli come arrivo da Ora e Partenza da un selettore, e basta usare la sottrazione:

Dim arrivaldate As DateTime = DateTime.Now 
Dim departuredate As DateTime = Me.DeparturePicker.Value 

Dim DaysStayed as Int32 = departuredate.Subtract(arrivaldate).Days 

La cosa da ricordare è che il risultato è un oggetto TimeSpan. Se osservi la struttura, vedrai che fornisce il tempo trascorso in unità da Days a Ticks.

Il codice sopra coglie il valore Days da TimeSpan senza creare una temp TimeSpan var. Un altro modo:

Dim tsHotelStay = detarturedate.Value - arrivalDate 
wholeDays = tsHotelStay.Days    ' e.g 7 
totalDays = tsHotelStay.TotalDays   . e.g. 7.53 
totalHrs = tsHotelStay.TotalHours   . eg 180.397 

Questa volta, il codice non creare una variabile TimeSpan (tsHotelDay). Nota che tutte le proprietà sono disponibili in forme intere e frazionarie (eccetto le zecche).

Infine, i 2 metodi di sottrazione mostrati (DateTime.Subtract(dt) e myTs = dtA - dtB) sono funzionalmente identici: entrambi restituiscono un oggetto TimeSpan.

1

Forse si potrebbe usare

`DateDiff(DateInterval.Day, DateTimePicker1.Value, DateTimePicker2.Value) 

per calcolare il numero di intervalli di data (giorni) betveen due date.

Problemi correlati