将Java时间偏移几秒钟

时间:2016-04-23 16:21:26

标签: java

这是我想做的事情:

我有一个日期/时间作为字符串,类似于“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

4 个答案:

答案 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.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 );