Java中yyyymmddhhmmss.mmm格式的递增日期

Java中yyyymmddhhmmss.mmm格式的递增日期,java,date,Java,Date,我希望在每次迭代中以yyyymmddhhmmss.mmm格式增加任何给定日期的毫秒数。这里的mmm表示毫秒。我想在Java1.5中执行这个操作 例如:20120823151034.567应该增加到20120823151034.568您可以将String解析为Date对象,并使用getTime()和setTime(long l)修改日期。然后可以将日期对象转换回字符串。对于解析String并将Date对象转换回String,可以使用SimpleDataFormat类。用于此操作的最佳类是。将其设置

我希望在每次迭代中以yyyymmddhhmmss.mmm格式增加任何给定日期的毫秒数。这里的mmm表示毫秒。我想在Java1.5中执行这个操作


例如:20120823151034.567应该增加到20120823151034.568

您可以将
String
解析为
Date
对象,并使用
getTime()
setTime(long l)
修改日期。然后可以将
日期
对象转换回
字符串
。对于解析
String
并将
Date
对象转换回
String
,可以使用
SimpleDataFormat
类。

用于此操作的最佳类是。将其设置为所需的日期,然后使用

myCalendar.add(Calendar.MILLISECOND, 1);

使其前进一毫秒。用于生成字符串表示。

这将为您提供所需的内容。它将跨越任何一天/月/年边界工作,并处理夏令时的开始和结束

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

不使用日历的替代方案(尽管日历可以)


您可以使用
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));

我不会使用Calendar,因为它的速度非常慢。

您可以使用Calendar类和Date类来完成此任务

日期类别:

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()));
日历类:

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,您需要捕获并处理该异常。

您显然复制了粘贴的代码。你用的是我的生日作为例子。@MarkoTopolnik Busted:)-你的日期格式很理想,所以我抓住了它和前一行。这正是我想要的。非常感谢。如果你想明确控制时区,你仍然需要日历。否则,对于这种特殊情况,这是更好的选择。@MarkoTopolnik假设您的输入和输出时区相同,这不应该是一个问题。当夏时制随着时间的倒转而改变时,您可能会遇到问题。无论您使用
日期
还是
日历
,DST的效果都是相同的。事实上,当使用区域设置的默认时区时,它们将具有完全相同的行为。哦,是的,请记住,如果重用
日历
实例,则不会造成性能损失。建设需要时间。不过,我并不建议使用共享线程safe
Calendar
s,因为这两种方法都有+1。不过,它确实让人意识到,对于这个作业来说,日历是一种过火的行为,因为日历案例的API调用即使不是更干净,也是大致相同的。第二个示例只包含重复的代码,以及在这两种情况下相同的异常处理。@MarkoTopolnik。。。而parseException在这两种情况下都会发生。我将编辑这篇文章以反映这一点。这篇文章非常漂亮,现在所有的答案都共享前两行!使用
final
localvars是我的个人风格,几乎没有人这样写。@Marko感谢您对这种风格的赞扬