Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP';Java中的strotime()是什么?_Java_Datetime_Date_Time - Fatal编程技术网

PHP';Java中的strotime()是什么?

PHP';Java中的strotime()是什么?,java,datetime,date,time,Java,Datetime,Date,Time,我正在寻找一种简单的方法,从用户可能输入的任何类型的时间输入生成MySQL DATETIME。PHP通过其strottime()函数简化了操作,该函数可以执行以下操作: 标准时间('2004-02-12T15:19:21+00:00') 标准时间('Thu,2000年12月21日16:01:07+0200') 标准时间(1月1日星期一) 标准时间(“明天”) 标准时间(“-1周2天4小时2秒”) 产出: 2004-02-12 07:02:21 2000-12-2106:12:07 2009-01

我正在寻找一种简单的方法,从用户可能输入的任何类型的时间输入生成MySQL DATETIME。PHP通过其strottime()函数简化了操作,该函数可以执行以下操作:

标准时间('2004-02-12T15:19:21+00:00')

标准时间('Thu,2000年12月21日16:01:07+0200')

标准时间(1月1日星期一)

标准时间(“明天”)

标准时间(“-1周2天4小时2秒”)

产出:

2004-02-12 07:02:21

2000-12-2106:12:07

2009-01-01 12:01:00

2009-02-12 12:02:00

2009-02-06 09:02:41


我想要Java版本的

感谢您的快速回复。这是我的解决方案,尽管它是硬编码来处理以下格式的日期:“2009年8月5日07:27:51 GMT”。也许有一种方法可以让它在发生解析异常时轻松处理其他格式

public static String stringToDateTime(String string) {
    SimpleDateFormat sdf = new SimpleDateFormat("d MMM yyyy HH:mm:ss z");
    Date date;
    String sqlDate;
    try {
        date = sdf.parse(string);
        SimpleDateFormat sqlFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sqlDate = sqlFormat.format(date);
    }
    catch(ParseException ex) {
        sqlDate = string;
    }

    return sqlDate;
}

我试图实现一个简单的(静态)类,该类模拟PHP的
strotime
的一些模式。此类设计为开放供修改(只需通过
注册表匹配器添加一个新的
匹配器
):

然后你可以写:

System.out.println(strtotime("3 days"));
System.out.println(strtotime("-3 days"));
(现在是2009年8月12日星期三22:18:57)

2009年8月15日星期六22:18:57 CEST 2009年8月9日星期日22:18:57 CEST
您可以将用户可能输入的所有可能格式添加到列表中并在其中进行迭代,尝试解析并捕获异常,直到解析成功或列表结束。注意:根据您的代码示例,您似乎正在尝试将日期转换为MySQL期望的字符串,以便动态构建SQL语句?这不是一个好方法,您应该改用PreparedStatement,并将date参数作为date对象传递
 Date now = strtotime("now");
 Date tomorrow = strtotime("tomorrow");
Wed Aug 12 22:18:57 CEST 2009 Thu Aug 13 22:18:57 CEST 2009
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"));
Sat Aug 15 22:18:57 CEST 2009 Sun Aug 09 22:18:57 CEST 2009