命令行中的日期

时间:2014-12-11 12:07:35

标签: java date datetime command-line args4j

我有一个从命令行运行的应用程序。作为其中一个参数,它有一个日期,应用程序应该从该日期开始处理某些数据。日期可以有两种不同的格式yyyy-MM-ddyyyy-MM-dd HH:mm:ss。但是当我以第二种格式运行带日期的应用程序时(例如2012-04-18 15:05:08),它使用-dd和HH之间的空格作为参数分隔符。我得到了例外

No argument is allowed: 15:05:08

我可以在命令行中用引号括起日期。但还有其他方法可以这样做而不包装吗?

对于解析命令行参数,我正在使用org.kohsuke.args4j库。 有什么建议?

2 个答案:

答案 0 :(得分:0)

如果日期中有空格,例如2014-12-11 13:08:08,则必须在命令行上放置引号,否则命令提示符会将其视为两个单独的参数。

当然,您可以更改您的程序,以便将日期和时间作为两个单独的参数处理:

public static void main(String[] args) {
    String date = args[0];
    String time = args[1];

    System.out.println("The date is: " + date);
    System.out.println("The time is: " + time);

    String dateTime = date + " " + time;
    System.out.println("The date and time: " + dateTime);
}

(你可以自己找出如何用args4j做到这一点。)

答案 1 :(得分:0)

只需在数组上添加一些验证以避免空指针异常

public static void main(String[] args) {
    SimpleDateFormat sdf;
    String in;
    if(args.length = 1) {
     in = args[0];
     sdf = new SimpleDateFormat("yyyy-MM-dd");
    } else if(args.lenth = 2)
     in = args[0] + " " + args[1];
     sdf = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
    }


    if(args.length > 0) {
     Date date = sdf.parse(in);
     System.out.println("date:" + date);
    }
  }