2017-02-01 27 views
0

У меня есть почти законченный скрипт, но есть одна небольшая икота, которую я не могу исправить.Дата вычитания календаря

Прежде всего позвольте мне быстро объяснить сценарий. Он получает текущую дату, используя Calendar. Затем он добавляет 2 дня к текущей дате, после чего создает формат, чтобы изменить формат новой даты. Затем он печатает эту новую дату в TXT-файле, после чего она получает эту дату из файла .txt с помощью Scanner. Именно здесь, где я испытываю небольшую неприятность. Эта новая дата, которую я получил из TXT-файла, хотел бы вычесть из текущей текущей даты. Таким образом, я мог бы иметь обратный отсчет с текущей системной даты и до 2 дней с этого. В настоящее время код вычитается с использованием переменной даты todAdd в функции вычитания/обратного отсчета, которая является последними 6 строками кода. Но вместо того, чтобы быть этой переменной даты, я бы хотел, чтобы это была переменная dateFroText, но я не могу ее проанализировать до последнего кода вычитания, поскольку он, похоже, не очень хорошо обрабатывает синтаксический анализ переменной.

Итак, в основном, чтобы привести пример, я хотел бы, чтобы весь обратный отсчет имел todAdd, измененный с помощью dateFroText. Таким образом, вместо строк вы видели в полном коде ниже, было бы, как этот int yearDiff = dateFroText.get(Calendar.YEAR) - startDat.get(Calendar.YEAR);

В настоящее время я пытался изменить его к integer, в string и date, но все они генерируют одну ошибку, что делает невозможным запуск код.

При необходимости я скопировал весь код, чтобы вы могли его протестировать.

public class CdowTDate 
{ 

    static File dFileD = new File("date.txt"); 
    static String date = ""; 

    public static void main(String[] args) throws ParseException { 

     //Get current date and time 
     Calendar startDat = Calendar.getInstance(); 
     System.out.println("Current date: " + startDat.getTime()); 

     //Get that current date and time and then add 2 days 
     Calendar todAdd = Calendar.getInstance(); 
     todAdd.add(Calendar.DATE, 2); 
     System.out.println("Date in 2 days: " + todAdd.getTime()); 

     //Create a format for sending date to text file 
     SimpleDateFormat formDat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z"); 
     String formatted = formDat.format(todAdd.getTime()); 
     System.out.println("Formatted: " + formatted); 

     try{ 
      PrintWriter dW = new PrintWriter("date.txt"); 
      dW.println(formatted); 
      dW.close(); 
     } catch (IOException e) { 
     } 

     System.out.println(formDat.parse(formatted)); 

     try { 
      Scanner dateRead = new Scanner(dFileD); 
      while (dateRead.hasNextLine()) { 
       date = dateRead.nextLine(); 
       Date dateFroText = formDat.parse(date); 
       System.out.println("Date from text new format: " + dateFroText); 
      } 
      dateRead.close(); 
     } catch (Exception e) { 
      System.out.println("Error!"); 
     } 

     int yearDiff = todAdd.get(Calendar.YEAR) - startDat.get(Calendar.YEAR); 
     int dayDiff = ((yearDiff*365) + todAdd.get(Calendar.DAY_OF_YEAR)) - startDat.get(Calendar.DAY_OF_YEAR); 
     dayDiff--; 
     int hourDiffer = todAdd.get(Calendar.HOUR_OF_DAY)+23 - startDat.get(Calendar.HOUR_OF_DAY); 
     int minuDiff = todAdd.get(Calendar.MINUTE)+60 - startDat.get(Calendar.MINUTE); 
     System.out.println(dayDiff + " days " + hourDiffer + " hours " + minuDiff +" minutes remaining"); 


    } 

} 
+0

Сообщите нам об ошибке. – chevydog

ответ

0

Чтобы выполнить расчет, вам необходимо преобразовать дату объекта DateFroTxt в объект Calendar.

public static void main(String[] args) throws ParseException { 

     //Get current date and time 
     Calendar startDat = Calendar.getInstance(); 
     System.out.println("Current date: " + startDat.getTime()); 

     //Get that current date and time and then add 2 days 
     Calendar todAdd = Calendar.getInstance(); 
     todAdd.add(Calendar.DATE, 2); 
     System.out.println("Date in 2 days: " + todAdd.getTime()); 

     //Create a format for sending date to text file 
     SimpleDateFormat formDat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z"); 
     String formatted = formDat.format(todAdd.getTime()); 
     System.out.println("Formatted: " + formatted); 

     try { 
      PrintWriter dW = new PrintWriter("date.txt"); 
      dW.println(formatted); 
      dW.close(); 
     } catch (IOException e) { 
     } 

     System.out.println(formDat.parse(formatted)); 

     Date dateFroText = null; 
     try { 
      Scanner dateRead = new Scanner(dFileD); 
      while (dateRead.hasNextLine()) { 
       date = dateRead.nextLine(); 
       dateFroText = formDat.parse(date); 
       System.out.println("Date from text new format: " + dateFroText); 
      } 
      dateRead.close(); 
     } catch (Exception e) { 
      System.out.println("Error!"); 
     } 

     if (dateFroText != null) { 
      Calendar dateFromTxtCal = Calendar.getInstance(); 
      dateFromTxtCal.setTime(dateFroText); 
      int yearDiff = dateFromTxtCal.get(Calendar.YEAR) - startDat.get(Calendar.YEAR); 
      int dayDiff = ((yearDiff * 365) + dateFromTxtCal.get(Calendar.DAY_OF_YEAR)) - startDat.get(Calendar.DAY_OF_YEAR); 
      dayDiff--; 
      int hourDiffer = dateFromTxtCal.get(Calendar.HOUR_OF_DAY) + 23 - startDat.get(Calendar.HOUR_OF_DAY); 
      int minuDiff = dateFromTxtCal.get(Calendar.MINUTE) + 60 - startDat.get(Calendar.MINUTE); 
      System.out.println(dayDiff + " days " + hourDiffer + " hours " + minuDiff + " minutes remaining"); 
     } 
    }