public static SimpleDateFormat DATA_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void setStartTimeStr(String startTimeStr) {
this.startTimeStr = startTimeStr;
logger.info("po setStartTimeStr startTimeStr "+startTimeStr);
try {
this.startTime = DATA_FORMAT.parse(startTimeStr);
logger.info("po setStartTimeStr startTimeStr after startTime "+startTimeStr);
} catch (ParseException e) {
logger.info("po setStartTimeStr startTimeStr excepion="+e.getMessage());
e.printStackTrace();}}
 代码就是上述这个样子:在setStartTimeStr()时候,有时候时间转化成不是对应的时间,成了1970年某个时候,有时候成了几千年之后,究竟是怎么回事啊?
运行环境是这样的:我是提供的webservice接口,调用方传过来对应参数,时间参数都是年月日时分秒的形式的字符串,如2013-03-08 15:30:20,调用方式8个线程同时调用这个接口,他们是C++,我不知道这个跟多线程和语言有没有关系

解决方案 »

  1.   

    不要把SimpleDateFormat作为static变量。因为它是线程不安全的。每次new一个
      

  2.   

    我不用static ,public  SimpleDateFormat DATA_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    这样定义在类下也有问题,难道必须在set方法中直接new SimpleDateFormat 
      

  3.   

    是不是static不是关键,而是你同时N个线程在访问这个SDF。
      

  4.   

    多个线程同时,访问的话,它访问的应该是不同的对象,难道不同的对象也会出现问题?
    那该怎么做,用sychronized,还是在set方法中new SimpleDateFormat
      

  5.   

    你的public void setStartTimeStr(String startTimeStr){}方法的参数startTimeStr是通过webservice提供的yyyy-MM-dd hh:mm:ss的String格式的;
    还是你的参数startTimeStr是通过new Date(int year,int month,int date,int hours,int min).toString()获得的?
      

  6.   

    是通过webservice提供的yyyy-MM-dd hh:mm:ss的String格式的
      

  7.   

    public static SimpleDateFormat DATA_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    每次都new 一个