X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FGlobals.java;h=0dfe3252bd33ad02ca33764519cbefb626f3d516;hb=8b1fd23bad5b963e151e8962ef75091d20bbe462;hp=cd3f8741331835a9682710c6cafea6f75730427c;hpb=11c8dff16901782f69287854cb4788ddf8d932c2;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java b/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java index cd3f8741..0dfe3252 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/Globals.java @@ -25,8 +25,11 @@ import android.view.inputmethod.InputMethodManager; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public final class Globals { @ColorInt @@ -38,6 +41,8 @@ public final class Globals { public static String[] monthNames; private static SimpleDateFormat ledgerDateFormatter = new SimpleDateFormat("yyyy/MM/dd", Locale.US); + private static Pattern reLedgerDate = + Pattern.compile("^(?:(\\d+)/)??(?:(\\d\\d?)/)?(\\d\\d?)$"); public static void hideSoftKeyboard(Activity act) { // hide the keyboard View v = act.getCurrentFocus(); @@ -47,13 +52,28 @@ public final class Globals { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } } - public static Date parseLedgerDate(String dateString) { - try { - return ledgerDateFormatter.parse(dateString); - } - catch (ParseException e) { - throw new RuntimeException(String.format("Error parsing date '%s'", dateString), e); + public static Date parseLedgerDate(String dateString) throws ParseException { + Matcher m = reLedgerDate.matcher(dateString); + if (!m.matches()) throw new ParseException(dateString, 0); + + String year = m.group(1); + String month = m.group(2); + String day = m.group(3); + + String toParse; + if (year == null) { + Calendar now = Calendar.getInstance(); + int thisYear = now.get(Calendar.YEAR); + if (month == null) { + int thisMonth = now.get(Calendar.MONTH) + 1; + toParse = String.format(Locale.US, "%04d/%02d/%s", thisYear, thisMonth, dateString); + } + else toParse = String.format(Locale.US, "%04d/%s", thisYear, dateString); } + else toParse = dateString; + +// Log.d("globals", String.format("Parsing date '%s'", toParse)); + return ledgerDateFormatter.parse(toParse); } public static String formatLedgerDate(Date date) { return ledgerDateFormatter.format(date);