2016-12-10 53 views
0

我使用下面的代碼來罰款人,如果他們在該書到期後提交書籍。但是當我計算出公民的日期正在變爲1/1/0001?如何使用系統日期時間顯示原始日期C#

我需要幫助保持原始duedate顯示。

private short BookLoan; 

private void btnCal_Click(object sender, EventArgs e) 
{ 
    System.DateTime DateDueBack = new System.DateTime(); 

    long DaysOverdue = 0; 
    decimal FineRate = default(decimal); 
    decimal Fine = default(decimal); 

    txtDateDue.Text = DateDueBack.ToString(); 

    DaysOverdue= Microsoft.VisualBasic.DateAndTime.DateDiff("d", DateDueBack, txtDateReturned.Text); 

    switch (numericUpDown1.DecimalPlaces) { 
     case 0: 
      BookLoan = 1; 
      FineRate = 2; 
      break; 
     case 1: 
      BookLoan = 3; 
      FineRate = 3; 
      break; 
     case 2: 
      BookLoan = 10; 
      FineRate = 5; 
      break; 
     case 3: 
      BookLoan = 30; 
      FineRate = 35; 

      break; 
    } 

    if (DaysOverdue <= 0) { 
     DaysOverdue = 0; 
    } 

    if (DaysOverdue > 0) { 
     Fine = FineRate * DaysOverdue; 
    } else { 
     Fine = 0; 
    } 

    txtDateOverDue.Text = DaysOverdue + " days overdue"; 
    txtReturnFine.Text = "Fine of " + Strings.Format(Fine, "Currency") + " to pay"; 
} 
+2

不要依賴VB的隱式DateTime/String轉換。使用明確的'DateTime.Parse'或'TryParse'調用。 – Dai

+0

請多曝光 –

回答

0
System.DateTime DateDueBack = new System.DateTime(); 

此行是創建一個新的DateTime對象,但沒有分配日期,以便它會採取默認值是01/01/0001。

您需要閱讀某些來源的日期,大概是存儲圖書貸款的數據庫。

您也可以計算逾期天通過簡單地從到期日減去DateTime.Today回來,得到的總天數:

TimeSpam overdue = DateDueBack - DateTime.Today; 
double daysOverDue = overdue.TotalDays; 

這包括分數天,所以你可以再四捨五入到最接近的一整天或截斷以根據需要獲取整個天數。

+0

顯示屏顯示的是原始日期,但用日期值計算01/01/0001 –

+0

@ChabotaMbola我很確定DateTime對象上的ToString()方法正在由當前區域性變異在DateTime對象上導致它採取01/01/0001並將其轉換爲系統當前日期。 – aguertin