7

在下面的代码中,如何设置到达日期和出发日期,以便获得应付金额?我需要设置它们,因为我在酒店住了几天,这样我才能得出一个总数。如果这有任何意义?我在 Visual Basic 中使用 datetimepickers。

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              
4

3 回答 3

18

DateTime数学一开始可能会令人困惑。DateTimePicker但是它们是控件还是变量并不重要,因为它们是myDateTimePicker.Value 类型DateTime。因此,您可以混合和匹配变量和控件,例如 Arrival as Now 和 Departure from a picker,并且只需使用减法:

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

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

要记住的是结果是一个TimeSpan对象。如果您查看该结构,您会发现它提供了从Days到的单位所用时间Ticks

上面的代码在不创建临时变量的情况下Days从 中提取值。另一种方式:TimeSpanTimeSpan

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

这一次,代码确实创建了一个TimeSpan变量 ( tsHotelDay)。请注意,所有属性都以整数和分数形式提供(Ticks 除外)。

最后,显示的 2 个减法方法 (DateTime.Subtract(dt)myTs = dtA - dtB) 在功能上是相同的:都返回一个 TimeSpan 对象。

于 2013-09-26T01:21:53.290 回答
2

DateTimePicker 对象有一个Value 属性,它会为每个对象提供一个 DateTime。您可以通过从另一个中减去一个来获得两个 DateTime 对象的差异。

PS不要像那样吃所有的例外。这很不酷。

于 2013-09-26T00:52:43.293 回答
2

也许你可以使用

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

计算两个日期之间的日期间隔(天)数。

于 2016-03-01T20:37:39.283 回答