2013-03-20 50 views
0

我正在执行一个执行java jar文件的php批处理文件。当我运行命令通常它运行良好,但是当我通过PHP执行它。它给出了上述错误。java.text.ParseException:无法解析的日期:“2013年3月20日”通过从php执行批处理的jar

任何人都可以帮忙吗?

的Java:

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

当我手动运行以上回声$指令值,它运行正常。但通过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 
+0

它打印哪个错误? – javabeats 2013-03-20 14:49:15

+0

你确定你的php命令传递了正确的日期吗?我的意思是,没有引号或其他符号。 – jmrodrigg 2013-03-20 14:51:31

+0

是啊我执行手动输出$命令 – 2013-03-21 05:55:33

回答

0

SimpleDateFormat您构建应用dd-MMM-yyyy的日期格式。这要求$fromdate$todate是以相同惯例格式化的文本字符串。

如果您以某种可识别语言环境的方式打印它们,则可能会导致解析失败。您的PHP脚本应通过strftime("%d-%b-%Y")明确格式化日期。因为Mar3月的英文语言环境(例如也是意大利语,但该字符串肯定与语言环境相关)的缩写形式,所以您还希望PHP和Java程序使用相同的语言环境。您将一个Locale对象传递给Java端的SimpleDateFormatconstructor,将setlocale()作为PHP的一部分。

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

+0

让我试试.. 是这个问题有关字符编码。 – 2013-03-21 05:58:39

+0

也可能与字符编码有关 – Raffaele 2013-03-21 14:08:48

+0

如何处理字符编码? – 2013-03-23 05:31:55

相关问题