2016-08-31 40 views
0

我正在開發一個涉及訂票的Android應用程序。不知何故,我導入Google日曆和時鐘[使用Android Studio v1.5中提供的默認版本]。 我的機票預訂條件包括在選擇接機日期和時間的同時減去時間和日期以避免將來出現問題。 現在在這種情況下,我想改變以下事情:如何根據時間更改[android]在日曆中記錄日期?

反向時間:當用戶選擇一個特定的時間[在24小時制],它給這個用戶一個新的時間少於7小時的採摘時間。即如果我在下午2點選擇我的時間,則應在同一日期的上午9點顯示提貨時間。我不知何故設法應用每小時減去7小時的條件。但是我怎麼能這樣做呢,因爲讓一天中的每個小時都有條件讓人頭疼。如果有解決方案?

更新:我找到了解決方案,但問題是,如果我選擇上午時間它顯示時間在 - [減]。

現在第二個問題是,如果有人在早上凌晨2點的任何一個月的第一天預訂我的機票,我該如何將他的日期更改爲上一個日期?由於我是從拾取日期

減去7小時對於實例[正確的病情,我很期待]:如果一些用戶選擇2AM於3月1日,然後他/她的攝像時間和日期應該是在2月28日晚上9點。

請建議..!我附上我正在使用的代碼。

public class MainActivity extends AppCompatActivity implements 
     View.OnClickListener { 

    Button btnDatePicker, btnTimePicker; 
    EditText txtDate, txtTime; 
    private int mYear, mMonth, mDay, mHour, mMinute; 
    TextView tvpick; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btnDatePicker = (Button) findViewById(R.id.btn_date); 
     btnTimePicker = (Button) findViewById(R.id.btn_time); 
     txtDate = (EditText) findViewById(R.id.in_date); 
     txtTime = (EditText) findViewById(R.id.in_time); 
     tvpick = (TextView) findViewById(R.id.tvpicktime); 

     btnDatePicker.setOnClickListener(this); 
     btnTimePicker.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View v) { 

     if (v == btnDatePicker) { 

      // Get Current Date 
      final Calendar c = Calendar.getInstance(); 
      mYear = c.get(Calendar.YEAR); 
      mMonth = c.get(Calendar.MONTH); 
      mDay = c.get(Calendar.DAY_OF_MONTH); 


      DatePickerDialog datePickerDialog = new DatePickerDialog(this, 
        new DatePickerDialog.OnDateSetListener() { 

         @Override 
         public void onDateSet(DatePicker view, int year, 
               int monthOfYear, int dayOfMonth) { 

          txtDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year); 

         } 
        }, mYear, mMonth, mDay); 
      datePickerDialog.show(); 
     } 


    if (v == btnTimePicker) { 

     // Get Current Time 
     final Calendar c = Calendar.getInstance(); 
     mHour = c.get(Calendar.HOUR_OF_DAY); 
     mMinute = c.get(Calendar.MINUTE); 
     // c.add(Calendar.HOUR_OF_DAY, -6); 
     // Date picktime= c.getTime(); 
     // tvpick.setText(String.valueOf(picktime)); 

     // Launch Time Picker Dialog 
     TimePickerDialog timePickerDialog = new TimePickerDialog(this, 
       new TimePickerDialog.OnTimeSetListener() { 

        @Override 
        public void onTimeSet(TimePicker view, int hourOfDay, 
              int minute) { 

         txtTime.setText((hourOfDay) + ":" + minute); 
        // tvpick.setText((hourOfDay+(-6)) + ":" + minute); 

         if(hourOfDay==00) 
         { 
          tvpick.setText((17) + ":" + minute); 

         } 
         else if(hourOfDay==1) 
         { 
          tvpick.setText((18) + ":" + minute); 
         } 
         else if(hourOfDay==2) 
         { 
          tvpick.setText((19) + ":" + minute); 
         } 
         else if(hourOfDay==3) 
         { 
          tvpick.setText((20) + ":" + minute); 
         } 
         else if(hourOfDay==4) 
         { 
          tvpick.setText((21) + ":" + minute); 
         } 
         else if(hourOfDay==5) 
         { 
          tvpick.setText((22) + ":" + minute); 
         } 
         else if(hourOfDay==6) 
         { 
          tvpick.setText((23) + ":" + minute); 
         } 
         else if(hourOfDay==7) 
         { 
          tvpick.setText((00) + ":" + minute); 
         } 
         else if(hourOfDay==8) 
         { 
          tvpick.setText((01) + ":" + minute); 
         } 
         else if(hourOfDay==9) 
         { 
          tvpick.setText((02) + ":" + minute); 
         } 
         else if(hourOfDay==10) 
         { 
          tvpick.setText((03) + ":" + minute); 
         } 
         else if(hourOfDay==11) 
         { 
          tvpick.setText((04) + ":" + minute); 
         } 
         else if(hourOfDay==12) 
         { 
          tvpick.setText((05) + ":" + minute); 
         } 
         if(hourOfDay==13) 
         { 
          tvpick.setText((06) + ":" + minute); 
         } 
         else if(hourOfDay==14) 
         { 
          tvpick.setText((07) + ":" + minute); 
         } 
         else if(hourOfDay==15) 
         { 
          tvpick.setText((8) + ":" + minute); 
         } 
         else if(hourOfDay==16) 
         { 
          tvpick.setText((9) + ":" + minute); 
         } 
         else if(hourOfDay==17) 
         { 
          tvpick.setText((10) + ":" + minute); 
         } 
         else if(hourOfDay==18) 
         { 
          tvpick.setText((11) + ":" + minute); 
         } 
         else if(hourOfDay==19) 
         { 
          tvpick.setText((12) + ":" + minute); 
         } 
         else if(hourOfDay==20) 
         { 
          tvpick.setText((13) + ":" + minute); 
         } 
         else if(hourOfDay==21) 
         { 
          tvpick.setText((14) + ":" + minute); 
         } 
         else if(hourOfDay==22) 
         { 
          tvpick.setText((15) + ":" + minute); 
         } 
         else if(hourOfDay==23) 
         { 
          tvpick.setText((16) + ":" + minute); 
         } 
        } 
       }, mHour, mMinute, false); 
     timePickerDialog.show(); 
     } 
    } 
} 
+0

您是否試圖通過減去7小時來調整時區?如果是這樣,你這樣做是非常錯誤和非常困難的方式。或者是業務邏輯的零七小時部分? –

回答

1

開始:Java日曆對象吸引。這是說...你必須使用他們的這種情況。

從任何日期減去時間只需做到以下幾點:

Date date = new Date(); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date); 
    calendar.set(Calendar.HOUR, -7); 
    date.setTime(calendar.getTimeInMillis()); 

的,這將是輸出的任何日期/時間的「日期」對象有零下7小時。這包括處理切換月份&年。即使是閏年!

要清楚這是我將如何解決這個問題。這真的取決於你開始的日期格式與你想要的結果。

+0

我如何在文本字段中顯示上面的函數結果? – rohiH

+0

更精確一點...你的意思是你如何將日期對象格式化爲字符串? –

+0

是的,我想在textview中顯示結果。怎麼做? – rohiH