import java.text.DateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;//作用:提供字符串形式的日期到毫秒的转换,和毫秒到字符串日期以及年、月、日的转换
public class DateMillisConvert { private static GregorianCalendar calendar = new GregorianCalendar();

public DateMillisConvert() { } //提供“yyyy-mm-dd”形式的字符串到毫秒的转换
public static long getMillis(String dateString) {
String[] date = dateString.split("-");
return getMillis(date[0], date[1], date[2]);
}

//根据输入的年、月、日,转换成毫秒表示的时间
public static long getMillis(int year, int month, int day) {
GregorianCalendar calendar = new GregorianCalendar(year, month, day);
return calendar.getTimeInMillis();
} //根据输入的年、月、日,转换成毫秒表示的时间
public static long getMillis(String yearString, String monthString, String dayString) {
int year = Integer.parseInt(yearString);
int month = Integer.parseInt(monthString);
int day = Integer.parseInt(dayString);
return getMillis(year, month, day);
}

//获得当前时间的毫秒表示
public static long getNow() {
GregorianCalendar now = new GregorianCalendar();
return now.getTimeInMillis();
}

//根据输入的毫秒数,获得日期字符串
public static String getDate(long millis) {
calendar.setTimeInMillis(millis);
return DateFormat.getDateInstance().format(calendar.getTime());
} //根据输入的毫秒数,获得年份
public static int getYear(long millis) {
calendar.setTimeInMillis(millis);
return calendar.get(Calendar.YEAR);
} //根据输入的毫秒数,获得月份
public static int getMonth(long millis) {
calendar.setTimeInMillis(millis);
return calendar.get(Calendar.MONTH);
} //根据输入的毫秒数,获得日期
public static int getDay(long millis) {
calendar.setTimeInMillis(millis);
return calendar.get(Calendar.DATE);
} //根据输入的毫秒数,获得小时
public static int getHour(long millis) {
calendar.setTimeInMillis(millis);
return calendar.get(Calendar.HOUR_OF_DAY);
} //根据输入的毫秒数,获得分钟
public static int getMinute(long millis) {
calendar.setTimeInMillis(millis);
return calendar.get(Calendar.MINUTE);
} //根据输入的毫秒数,获得秒
public static int getSecond(long millis) {
calendar.setTimeInMillis(millis);
return calendar.get(Calendar.SECOND);
}
}

解决方案 »

  1.   

    String str = "20050101061236";
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
    long time = format.parse(str).getTime() + 1000l*60*60*8 + 1000l*60*60*24*30;format = new SimpleDateFormat("yyyyMMdd");
    Date res = format.parse(format.format(new Date(time)));
      

  2.   

    上面的那个类中的calendar对象最好不要做成static的
    否则在多线程的时候可能会有问题要不就把每一个方法设置为synchronized
      

  3.   

    没办法,数据格式偶也控制不了,自动生成这样的。
    GregorianCalendar计算两个日期的天数也要转换成秒吧~~
    谢谢 someone_somewhere overcast(http://blog.csdn.net/overcast) 
    overcast 好像SUN不赞成用DATE类啦 还有 1000l*60*60*8  为什么是10001??
    好像应该是1秒=1000毫秒吧
    不过问题已经解决~~ 谢谢各位朋友~~
      

  4.   

    那个是1000l 不是 10001
    1000是int类型,60和8都是
    如果这样相乘的话1000*60*60*24*30应该要溢出了,得到的结果会不对
    而1000l表示一个long类型就不会溢出了另外Date类应该没有@deprecated掉
    只是里面的一些方法不推荐使用了,比如getDay之类的