2016-05-23 142 views
0

我有一個字符串掠奪的格式,你在我的例子中看到解析。我試圖做出今天的決定。如何在日期和時間中分割完整日期格式-java,

我的問題是,時間差不多了,我只需要比較那個日期。

接下來,我要檢查,如果時間是兩個時間戳「HH:MM:SS」之間有。經過和。之前,但存在這樣的問題,該日期快到了......

主要問題是 - 如何拆分解析日期和時間來處理每一個在它自己的方式格式...

THX很多

PS:我是在Android工作室...

String dtStart = "2016-05-23 07:24:59"; 
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

try { 

    if (new Date().equals(format.parse(dtStart))) System.out.println("true"); 
    else System.out.println("false"); 

    list.add(new LatLng(lat, lng)); 

} catch (java.text.ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+1

首先用'「」'(空格)分割。取第一個元素並再次用'-'分隔,取第二個元素並用':'分割。現在你有分離的元素。 – Helios

+0

hehe-是字符串拆分很明顯,但也許有一個更簡單的方法與日期功能.. – John

+1

好吧,如果你想通過API來實現,那麼Java 8是一個偉大的東西給你。 – Helios

回答

8

java.time

使用java.time類內置到Java 8和更高版本。

許多功能已被移植到ThreeTen-Backport中的Java 6 & 7,並進一步適用於Android的ThreeTen-ABP

String dateToParse = "2016-05-23 07:24:59"; 
LocalDateTime dateTime = LocalDateTime.parse(dateToParse, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); 
LocalDate localDate = dateTime.toLocalDate(); 
LocalTime localTime = dateTime.toLocalTime(); 
// Compare here to your date & time 
+0

看起來很酷,但在android studio中不工作 - 我錯過了說... – John

+1

@John很多java.time被移植到Android。看到添加到這個答案的鏈接。只需將一個罐子添加到您的項目。舊的日期 - 時間類真的很麻煩。 –

2

您可以輕鬆地通過使用SimpleDateFormat這樣實現它:

//Houres - seconds 
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

//Years - days 
Date hoursAndMinutes = timeFormat.parse(dtStart); 
Date yearsMonthsDays = dateFormat.parse(dtStart); 

這樣的話,你只能得到你的約會的小時,分​​鍾和秒。 然後,您可以對年份和月份做同樣的事情,然後再進行比較。

+1

'java.util.Date'對象不適合存儲部分日期或時間(即只有年/月/日或只有小時/分鐘/秒)。 – Jesper

+0

java.text.ParseException:Unparseable date:「2016-05-23 07:24:59」(在偏移量4) – John

1

而只是爲了完整,這裏是你如何使用喬達日期時間庫和toLocalDate()toLocalTime()方法做到這一點。

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
DateTime today = new DateTime(); 
DateTime start = formatter.parseDateTime(dtStart); 
if (today.toLocalDate().compareTo(start.toLocalDate()) != 0) { 
    System.out.println("true"); 
} else { 
    System.out.println("false"); 
} 

if (today.toLocalTime().compareTo(start.toLocalTime()) > 0) { 
... 
} 
+0

[Joda-Time](http://www.joda.org/joda-time/)團隊現在建議使用[java.time](https://docs.oracle.com/javase/8/ docs/api/java/time/package-summary.html)框架。參見[Shiv V的回答](http://stackoverflow.com/a/37391062/642706)。 –

+0

我確實看到了答案,我只是在OP無法使用Java 8的情況下提供此解決方案(即使現在也是一個令人驚訝的常見問題)。 – AndyN

0

THX的幫助和SRY我忘了說我是在Android工作室..

,我發現我的解決方案在這裏:https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

String dtStart = "2016/05/23 07:24:59"; 
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 

try { 
     Date dtStartOK = format.parse(dtStart); 
     String stringDate = DateFormat.getDateTimeInstance().format(dtStartOK); 
     System.out.println(stringDate); 

     System.out.println(DateFormat.getDateInstance().format(dtStartOK)); 
     System.out.println(DateFormat.getTimeInstance().format(dtStartOK)); 

} catch (ParseException e) { 
     //Handle exception here, most of the time you will just log it. 
     e.printStackTrace(); 
} 

給我:

23.05 .2016 07:24:59

23.05.2016

07:24:59