java.text.ParseException:Unparseable date:“20-Mar-2013”​​jar通过php批量执行

时间:2013-03-20 14:43:07

标签: java php batch-file

我正在从php执行批处理文件,执行java jar文件。当我正常运行命令它运行正常,但当我通过PHP执行它。它给出了上述错误。

任何人都可以帮忙吗?

爪哇:

        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");

        //get current date time
        //tdt = new java.util.Date();
        Calendar c = Calendar.getInstance();
        try {
            tdt= sdf.parse(startdate);
        } catch (ParseException ex) {
            Logger.getLogger(ReportExporter.class.getName()).log(Level.SEVERE, null, ex);
        }

PHP:

    $command ="cmd /c ".EXPORT_BATCH_PATH." ".$fromdate." ".$todate." &";
    echo $command;
    $result = system($command, $output);

OR:

    $command ="cmd /c ".EXPORT_BATCH_PATH." ".$fromdate." ".$todate." &";
    echo $command;
    $result = exec($command, $output);

当我手动运行上面的echo $命令值时,它会正常运行。但是通过php执行给出错误。

我的PHP脚本包含这一行;

<?php header('Content-type: text/html; charset=utf-8'); 
setlocale(LC_ALL, 'en_US');?>

文本编码有问题吗?

请查看接受的答复..下面的一行解决了我的问题;

    java -Duser.language=en -Duser.region=US -Dfile.encoding=UTF-8 -jar c:\Progra~1\MyApplication\MyApplication.jar -exportfromto %1 %2

1 个答案:

答案 0 :(得分:0)

您构建的SimpleDateFormat使用dd-MMM-yyyy作为日期格式。这需要$fromdate$todate成为以相同约定格式化的文本字符串。

如果以某种可识别语言环境的方式打印它们,则解析可能会失败。您的PHP脚本应通过strftime("%d-%b-%Y")明确地格式化日期。您还希望PHP和Java程序使用相同的语言环境,因为Mar March 的缩写形式,在英语语言环境中(例如也是意大利语,但这个字符串肯定是区域设置依赖)。您将Locale对象传递给Java端的SimpleDateFormat constructor,并将setlocale()传递给PHP couterpart。

顺便说一句,在调用外部程序时,请记住to escape input以避免空格和其他特殊字符(这可能不是你的情况,但它是一个有用的一般建议,因为它经常被遗忘并导致意外的错误)