Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java时间偏移若干秒_Java - Fatal编程技术网

将Java时间偏移若干秒

将Java时间偏移若干秒,java,Java,以下是我想做的: 我将日期/时间作为字符串,类似于“2010年1月2日10:25:30”。 格式由localeLang(en、ja、unix等)和localecocountry(US、JP等)定义。知道表示日期的字符串及其格式(由区域设置给定),我想计算以秒为单位移动的日期/时间 例如: 日期/时间=2010年1月2日10:25:30 换档时间=5秒 结果=2010年1月2日10:25:35 有没有一种简单的方法可以使用Java提供的功能来实现这一点? 我的意思是我不想自己写所有的逻辑,记住闰年

以下是我想做的:

我将日期/时间作为字符串,类似于“2010年1月2日10:25:30”。 格式由localeLang(en、ja、unix等)和localecocountry(US、JP等)定义。知道表示日期的字符串及其格式(由区域设置给定),我想计算以秒为单位移动的日期/时间

例如: 日期/时间=2010年1月2日10:25:30 换档时间=5秒 结果=2010年1月2日10:25:35

有没有一种简单的方法可以使用Java提供的功能来实现这一点? 我的意思是我不想自己写所有的逻辑,记住闰年和所有这些细节…:D

解决方案#1

将字符串解析为日期(),然后添加5秒,并将日期转换为字符串(使用相同的SimpleDataFormat对象)

解决方案#2

将字符串拆分为所有组件,并将5添加到最后一个组件(即“秒”组件)。如果结果大于60,则在“分钟”组件中添加1,并加入组件,使其与旧格式匹配

将字符串解析为日期(),然后添加5秒,并将日期转换为字符串(使用相同的SimpleDataFormat对象)

解决方案#2


将字符串拆分为所有组件,并将5添加到最后一个组件(即“秒”组件)。如果结果大于60,则将1添加到“分钟”组件并加入这些组件,使它们与旧格式匹配

您可以实例化日历对象并使用添加功能。因为您已经知道将要接收的日期的格式,所以可以实例化SimpleDataFormat对象并传递格式和区域设置。我有一个下面的工作样本

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

您可以实例化日历对象并使用add函数。因为您已经知道将要接收的日期的格式,所以可以实例化SimpleDataFormat对象并传递格式和区域设置。我有一个下面的工作样本

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

最简单的方法是将字符串解析为:

然后再加上5秒钟:

LocalDateTime result = date.plus(5, ChronoUnit.SECONDS);

最简单的方法是将字符串解析为:

然后再加上5秒钟:

LocalDateTime result = date.plus(5, ChronoUnit.SECONDS);
java.time java.time框架内置于Java8及更高版本中。这些类取代了旧的麻烦类,如java.util.Date/.Calendar。这些课程取代了非常成功的Joda Time library

以UTC格式获取时间线上的当前时刻

Instant instant = Instant.now();
应用时区

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
再加5秒钟。“加…”方法处理闰年、夏令时和其他异常情况等问题

ZonedDateTime zdtLater = zdt.plusSeconds( 5 );
使用您的语言和国家代码确定
区域设置
对象

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 );
java.time java.time框架内置于Java8及更高版本中。这些类取代了旧的麻烦类,如java.util.Date/.Calendar。这些课程取代了非常成功的Joda Time library

以UTC格式获取时间线上的当前时刻

Instant instant = Instant.now();
应用时区

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
再加5秒钟。“加…”方法处理闰年、夏令时和其他异常情况等问题

ZonedDateTime zdtLater = zdt.plusSeconds( 5 );
使用您的语言和国家代码确定
区域设置
对象

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

看看这些课。您将字符串解析为一个类,然后添加秒数。我建议您创建一个保留初始时间的字符串,然后使用
Calendar.add()
方法将指定的时间添加到日历中,其余时间将在后台处理。您的输入数据是否包括时区或与UTC的偏移量?请查看这些类。您将字符串解析为一个类,然后添加秒数。我建议您创建一个保留初始时间的字符串,然后使用
Calendar.add()
方法将指定的时间添加到日历中,其余时间将在后台处理。您的输入数据是否包括时区或与UTC的偏移量?您的解决方案#1是正确的,但你的解决方案2太糟糕了,这是投否决票的理由。OP已经预料到了这一点,并明确表示他不想这样做。@MikeNakis Solution#2是正确的。这需要一些逻辑,但没有错。是的,OP说他不想做这个逻辑,所以我的答案是解决方案1。你为什么抱怨额外的信息?如果有人说他不想做逻辑,并不意味着你不允许写逻辑概念你的解决方案#1是正确的,但你的解决方案#2太糟糕了,这是投反对票的原因。OP已经预料到了这一点,并明确表示他不想这样做。@MikeNakis Solution#2是正确的。这需要一些逻辑,但没有错。是的,OP说他不想做这个逻辑,所以我的答案是解决方案1。你为什么抱怨额外的信息?如果有人说他不想做逻辑,并不意味着你不被允许写逻辑概念更好的方法,因为它不依赖过时和有问题的日期和时间类。更好的方法,因为它不依赖过时和有问题的日期和时间类。我想这是我的主要问题,我不知道收到的数据的格式。它可以是“2010年1月2日10:25:30”,也可以是“2010年2月1日10:25:30”。但是,我知道地区国家和地区语言。换句话说,可以从区域设置推断格式。我想知道是否有一个很好的解决方案,没有硬编码的格式?是否有任何形式的验证