PHP在Java中的strtotime()

PHP在Java中的strtotime(),第1张

PHP在Java中的strtotime()

我试图实现一个简单的(静态)类,该类模仿PHP的某些模式

strtotime
。此类旨在 开放用于修改
(只需
Matcher
通过添加一个新的
registerMatcher
):

public final class strtotime {    private static final List<Matcher> matchers;    static {        matchers = new linkedList<Matcher>();        matchers.add(new NowMatcher());        matchers.add(new TomorrowMatcher());        matchers.add(new DateFormatMatcher(new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z")));        matchers.add(new DateFormatMatcher(new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z")));        matchers.add(new DateFormatMatcher(new SimpleDateFormat("yyyy MM dd")));        // add as many format as you want     }    // not thread-safe    public static void registerMatcher(Matcher matcher) {        matchers.add(matcher);    }    public static interface Matcher {        public Date tryConvert(String input);    }    private static class DateFormatMatcher implements Matcher {        private final DateFormat dateFormat;        public DateFormatMatcher(DateFormat dateFormat) { this.dateFormat = dateFormat;        }        public Date tryConvert(String input) { try {     return dateFormat.parse(input); } catch (ParseException ex) {     return null; }        }    }    private static class NowMatcher implements Matcher {        private final Pattern now = Pattern.compile("now");        public Date tryConvert(String input) { if (now.matcher(input).matches()) {     return new Date(); } else {     return null; }        }    }    private static class TomorrowMatcher implements Matcher {        private final Pattern tomorrow = Pattern.compile("tomorrow");        public Date tryConvert(String input) { if (tomorrow.matcher(input).matches()) {     Calendar calendar = Calendar.getInstance();     calendar.add(Calendar.DAY_OF_YEAR, +1);     return calendar.getTime(); } else {     return null; }        }    }    public static Date strtotime(String input) {        for (Matcher matcher : matchers) { Date date = matcher.tryConvert(input); if (date != null) {     return date; }        }        return null;    }    private strtotime() {        throw new UnsupportedOperationException();    }}
用法

基本用法

 Date now = strtotime("now"); Date tomorrow = strtotime("tomorrow");2009年8月12日星期三22:18:57 CEST2009年8月13日星期四22:18:57 CEST
延伸

例如,让我们添加 天数匹配器

strtotime.registerMatcher(new Matcher() {    private final Pattern days = Pattern.compile("[\-\+]?\d+ days");    public Date tryConvert(String input) {        if (days.matcher(input).matches()) { int d = Integer.parseInt(input.split(" ")[0]); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, d); return calendar.getTime();        }        return null;    }});

然后您可以编写:

System.out.println(strtotime("3 days"));System.out.println(strtotime("-3 days"));

(现在是

Wed Aug 12 22:18:57 CEST 2009

2009年8月15日星期六22:18:57 CEST周日2009年8月9日22:18:57


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5559979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存