Here you can find the source of parseDateDiff(String time, boolean future)
public static long parseDateDiff(String time, boolean future) throws Exception
//package com.java2s; //License from project: Open Source License import java.util.Calendar; import java.util.GregorianCalendar; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static long parseDateDiff(String time, boolean future) throws Exception { Pattern timePattern = Pattern.compile("(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?" + "(?:([0-9]+)\\s*(?:s[a-z]*)?)?", Pattern.CASE_INSENSITIVE); Matcher m = timePattern.matcher(time); int hours = 0; int minutes = 0; int seconds = 0; boolean found = false; while (m.find()) { if (m.group() == null || m.group().isEmpty()) continue; for (int i = 0; i < m.groupCount(); i++) { if (m.group(i) != null && !m.group(i).isEmpty()) { found = true;/*from w w w.ja va2 s . c o m*/ break; } } if (found) { if (m.group(5) != null && !m.group(5).isEmpty()) hours = Integer.parseInt(m.group(5)); if (m.group(6) != null && !m.group(6).isEmpty()) minutes = Integer.parseInt(m.group(6)); if (m.group(7) != null && !m.group(7).isEmpty()) seconds = Integer.parseInt(m.group(7)); break; } } if (!found) throw new Exception("illegalDate"); Calendar c = new GregorianCalendar(); if (hours > 0) c.add(Calendar.HOUR_OF_DAY, hours * (future ? 1 : -1)); if (minutes > 0) c.add(Calendar.MINUTE, minutes * (future ? 1 : -1)); if (seconds > 0) c.add(Calendar.SECOND, seconds * (future ? 1 : -1)); Calendar max = new GregorianCalendar(); max.add(Calendar.YEAR, 10); if (c.after(max)) return max.getTimeInMillis(); return c.getTimeInMillis(); } }