PHP在Java中的strtotime()

PHP中的strtotime()可以进行以下转换:

输入:

strtotime('2004-02-12T15:19:21 + 00:00');

strtotime('Thu,2000年12月21日16:01:07 +0200');

strtotime('1月1日,星期一');

strtotime('明天');

strtotime('-1周2天4小时2秒');

输出:

2004-02-12 07:02:21

2000-12-21 06:12:07

2009-01-01 12:01:00

2009-02-12 12:02:00

2009-02-06 09:02:41

有没有一种简单的方法可以在Java中做到这一点?

是的,这是重复项。但是,原始问题没有得到回答。我通常需要能够查询过去的日期。我想让用户说“我希望从“

-1周”到“现在”的所有事件”。这将使编写这些类型的请求的脚本变得更加容易。

回答:

我试图实现一个简单的(静态)类,该类模仿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 CEST

2009年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

以上是 PHP在Java中的strtotime() 的全部内容, 来源链接: utcz.com/qa/428523.html

回到顶部