我想在每次迭代中以 yyyymmddhhmmss.mmm 格式增加任何给定日期的毫秒数。mmm 这里代表毫秒。我想在 Java 1.5 中执行这个操作。
例如:20120823151034.567 应该递增到 20120823151034.568
您可以使用long
毫秒,这使得递增变得微不足道。
final String input = "20120823151034.567";
final DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss.SSS");
Date d = df.parse(input);
d.setTime(d.getTime()+1);
System.out.println(df.format(d));
我不会使用日历,因为它非常慢。
您可以解析String
为Date
对象并使用getTime()
和setTime(long l)
修改日期。然后您可以将Date
对象转换回String
. 对于解析对象String
并将其转换Date
回String
您可以使用SimpleDateFormat
类。
用于此操作的最佳类是Calendar
. 您将其设置为所需的日期,然后使用
myCalendar.add(Calendar.MILLISECOND, 1);
将其提前一毫秒。用于DateFormat
生成字符串表示。
这给了你你想要的。它将跨越任何日/月/年边界,以及处理夏令时的开始和结束。
final String input = "20120823151034.567";
final DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss.SSS");
final Calendar c = Calendar.getInstance();
c.setTime(df.parse(input));
c.add(Calendar.MILLISECOND, 1);
System.out.println(df.format(c.getTime()));
您可以为此使用日历类和日期类......
日期类:
final String dateStr = "20120823151034.567";
final DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss.SSS");
Date date = format.parse(input);
date.setTime(date.getTime()+1);
System.out.println(format.format(date));
日历类:
final String dateStr = "20120823151034.567";
final DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss.SSS");
Calendar c = Calendar.getInstance();
c.setTime(format.parse(dateStr ));
c.add(Calendar.MILLISECOND,1);
System.out.println(format.format(c.getTime()));
在这两种情况下,format.parse() 都有可能抛出 ParseException,您需要捕获和处理它。
不使用日历的替代方案(尽管日历很好)
final String input = "20120814120000.111";
final DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss.SSS");
Date date = new format.parse(input);
long time = date.getTime();
Date incrementedDate = new Date(time + 1);
System.out.println(format.format(date));