这是我想做的事情:
我有一个日期/时间作为字符串,类似于“2010年1月2日10:25:30”。 格式由localeLang(en,ja,unix等)和localeCountry(US,JP等)定义。知道代表日期和字符串的字符串(由locale给出),我想计算移动了几秒钟的日期/时间。
例如: 日期/时间= 2010年1月2日10:25:30 转移秒数= 5 结果= 2010年1月2日10:25:35
使用Java提供的方法有一种简单的方法吗? 我的意思是我不想自己编写所有逻辑,记住闰年和所有这些细节...:D
答案 0 :(得分:2)
您可以实例化Calendar对象并使用add函数。由于您已经知道将要接收的日期的格式,因此您可以实例化SimpleDateFormat对象并传入您的格式和Locale。我有一个下面的样本可行。
Calendar calendar = Calendar.getInstance();
String dateStringReceived = "January 2, 2010 10:25:30";
System.out.println("Original Date: " + dateStringReceived);
String dateFormat = "MMMM dd, yyyy HH:mm:ss";
SimpleDateFormat dateFormatter = new SimpleDateFormat(dateFormat, Locale.US);
calendar.setTime(dateFormatter.parse(dateStringReceived));
calendar.add(Calendar.SECOND, 5);
System.out.println(dateFormatter.format(calendar.getTime()));
答案 1 :(得分:2)
最简单的方法是将字符串解析为a LocalDateTime
object:
String input = "January 2, 2010 10:25:30";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MMMM d, yyyy HH:mm:ss", Locale.ENGLISH);
LocalDateTime date = LocalDateTime.parse(input, fmt);
然后再加5秒:
LocalDateTime result = date.plus(5, ChronoUnit.SECONDS);
答案 2 :(得分:0)
解决方案#1
将String解析为日期(How to parse date string to Date?),然后添加5秒,并将日期设置为字符串(使用相同的SimpleDateFormat对象)
解决方案#2
将字符串拆分为所有组件,并将5添加到最后一个组件(应该是"秒"组件)。如果结果大于60,则在"分钟"中添加1;组件并加入组件,使它们与旧格式匹配
答案 3 :(得分:0)
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦类,如java.util.Date/.Calendar。这些类取代了非常成功的Joda-Time库。
以UTC格式获取时间轴上的当前时刻。
Instant instant = Instant.now();
申请时区。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
加5秒。 “plus ...”方法处理诸如闰年,夏令时和其他异常等问题。
ZonedDateTime zdtLater = zdt.plusSeconds( 5 );
使用您的语言和国家/地区代码来确定Locale
对象。
Locale locale = new Locale( "fr" , "CA" ); // French, Canada (Québec)
生成字符串。让格式化程序根据区域设置自动进行本地化,转换为法语等人类语言,并使用文化格式规范(元素顺序,逗号与句点等),例如加拿大魁北克省。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL );
formatter = formatter.withLocale( locale );
String string = zdtLater.format( formatter );
走向另一个方向。
ZonedDateTime zdtNew = ZonedDateTime.parse( string , formatter );