2016-05-23 143 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