Java中yyyymmddhhmmss.mmm格式的递增日期
我希望在每次迭代中以yyyymmddhhmmss.mmm格式增加任何给定日期的毫秒数。这里的mmm表示毫秒。我想在Java1.5中执行这个操作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类。用于此操作的最佳类是。将其设置
例如: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的效果都是相同的。事实上,当使用区域设置的默认时区时,它们将具有完全相同的行为。哦,是的,请记住,如果重用日历
实例,则不会造成性能损失。建设需要时间。不过,我并不建议使用共享线程safeCalendar
s,因为这两种方法都有+1。不过,它确实让人意识到,对于这个作业来说,日历是一种过火的行为,因为日历案例的API调用即使不是更干净,也是大致相同的。第二个示例只包含重复的代码,以及在这两种情况下相同的异常处理。@MarkoTopolnik。。。而parseException在这两种情况下都会发生。我将编辑这篇文章以反映这一点。这篇文章非常漂亮,现在所有的答案都共享前两行!使用final
localvars是我的个人风格,几乎没有人这样写。@Marko感谢您对这种风格的赞扬