gpt4 book ai didi

java - Java 中的 PHP strtotime()?

转载 作者:搜寻专家 更新时间:2023-11-01 03:57:11 25 4
gpt4 key购买 nike

我正在寻找一种简单的方法来根据用户可能输入的任何类型的时间输入生成 MySQL DATETIME。 PHP 通过其 strtotime() 函数可以轻松实现:

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

strtotime('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 写的!

最佳答案

我试图实现一个简单的(静态的)类来模拟 PHP 的 strtotime 的一些模式。此类被设计为开放修改(只需通过registerMatcher 添加一个新的Matcher):

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");
Wed Aug 12 22:18:57 CEST 2009Thu Aug 13 22:18:57 CEST 2009

Extending

For example let's add days matcher:

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"));

(现在是 2009 年 8 月 12 日星期三 22:18:57 CEST)

Sat Aug 15 22:18:57 CEST 2009Sun Aug 09 22:18:57 CEST 2009

关于java - Java 中的 PHP strtotime()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1236678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com