2016-10-15 9 views
0

Я изо всех сил старался вычитать значения формата даты.как вычесть формат даты в формате java

я/р:

если выбрать день ('2016-02-14 20:10:10') - день ('2016-02-15 16:00:00') --- возвращение 1

• затем он перейдет в цикл.

Я должен сделать некоторые вычисления внутри этого. но как вычесть значение даты один в формате, и он должен вернуть 1 еще выйти из условия

может кто-нибудь, пожалуйста, помогите мне

Благодаря

+0

Что именно вы пытаетесь вычислить? Разница во времени между двумя датами? – c0der

+0

№. хотите вычесть только дату. , например ('2016-02-14 20:10:10') - день ('2016-02-15 16:00:00') это даст результат (15 - 14) = 1 –

+0

Преобразуйте их в миллисекунды и считайте, что 1 день 24 * 3600 .... или использовать объекты календаря –

ответ

0

Вот три варианта:

import java.text.SimpleDateFormat; 
import java.time.Instant; 
import java.time.LocalDate; 
import java.time.LocalDateTime; 
import java.time.ZoneId; 
import java.time.temporal.ChronoUnit; 
import java.util.Date; 

public class Test{ 

    public static void main(String[] arguments) { 

     String sDateString = "2016-02-14 20:10:10"; 
     String eDateString = "2016-02-15 20:10:10"; 
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
     Date startDate = null, endDate = null; 
     try { 
      startDate = df.parse(sDateString); 
      endDate = df.parse(eDateString); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     //difference in milliseconds 
     long diff = endDate.getTime() - startDate.getTime(); 

     //difference in days 
     System.out.println(diff/(3600*24*1000)); 

     /////////////////////////////////////////////////////////////// 
     //Alternatively , use java 8 
     LocalDate startLocalDate = LocalDateFromDate(startDate); 
     LocalDate endLocalDate = LocalDateFromDate(endDate); 
     //difference in days 
     System.out.println(ChronoUnit.DAYS.between(startLocalDate, endLocalDate)); 

     /////////////////////////////////////////////////////////////// 
     //Alternatively, if the String representation of date is fixed 
     //you can extract the string representing the day of the month 
     //not recommended) 

     //find index 0f last "-" 
     int sIndex = sDateString.lastIndexOf("-"); 
     //get the day in month substring, remove spaces 
     String s = sDateString.substring(sIndex+1,sIndex+3).trim(); 

     int eIndex = sDateString.lastIndexOf("-"); 
     String e = eDateString.substring(sIndex+1,sIndex+3).trim(); 

     //difference in days 
     System.out.println(Integer.parseInt(e) - Integer.parseInt(s)); 
    } 

    public static LocalDate LocalDateFromDate(Date date) { 

     Instant instant = Instant.ofEpochMilli(date.getTime()); 
     return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()) 
       .toLocalDate(); 
    } 
} 
+0

Привет, Спасибо, я получаю результат 1. –

+0

привет, не могли бы вы попробовать мою нижнюю задачу. http://stackoverflow.com/questions/40049875/how-to-write-a-udtf-code-for-the-below-task –

Смежные вопросы