当前位置: 首页 > 面试题库 >

PHP在Java中的strtotime()

狄玉书
2023-03-14
问题内容

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 中的对象,但是无法获得类似的功能;我只能提取整个字符串。我将如何模仿Java中的行为。 问题答案: 对于Matcher,要获取组,您必须使用方法。 例如 : 记住是相同的整个匹配序列。 关于ideone的例子 资源: Javadoc-Matcher.g

  • 问题内容: 我正在学习PHP5(上次检查PHP是在PHP4天内),我很高兴看到PHP5 OO比PHP4更像Java,但是仍然有一个问题使我感到非常困惑,因为我的Java背景:阵列。 我正在阅读“ Proffesional PHP6”(Wrox),它显示了自己的Collection实现。我在基于SPL的http://aheimlich.dreamhosters.com/generic- collec

  • 我正在尝试使用java对用户电子邮件id进行RSA加密,并尝试使用php进行解密。但我没有成功。以下是详细信息 java中的源代码: 私钥: RSA 加密输出: 和Bas64编码输出: php解密代码 php输出返回none。。。

  • 我正在加密我的Android应用程序中的一些数据,然后这些数据被发送到一个PHP页面进行解密和处理。 这有帮助吗?

  • 问题内容: 我一直在尝试使用AES-128 CBC解密字符串,该字符串最初是使用JAVA AES加密加密的。在Java中,使用PKCS7填充。而且我尝试使用类似的PHP代码进行加密和解密。但是我得到了不同的结果。 我的Java代码 以及我正在使用的等效PHP代码。 在Java中 纯文本= 123456 密码文本= tpyxISJ83dqEs3uw8bN / + w =​​= 在PHP中 纯文本=

  • 我一直在尝试使用AES-128 CBC解密一个字符串,它最初是使用JAVA AES加密加密的。在java中,使用了PKCS7填充。我试着用类似的PHP代码进行加密和解密。但我得到了不同的结果。 我的Java代码 以及我正在使用的等效PHP代码。 在Java 纯文本=123456 密码文本=tpyxISJ83dqEs3uw8bN/w== 在PHP中 纯文本=123456 密码文本=ierqftckt