如何在 java 中向字符串时间戳 (yyyy-mm-ddTHH:is+tz) 添加秒数
how to add seconds to string time stamp (yyyy-mm-ddTH:i:s+tz) in java
我有一个名为时间的字符串变量 2016-11-30T00:06:42+05:30
和持续时间 32700 即 545 分钟。
我想给上面的字符串时间戳添加持续时间,需要计算开始时间和结束时间。
所以我想得到 StartTime:00:06 和 EndTime:09:05.
我试过了但是没用
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date date = sdf.parse(startTime.toString());
Timestamp ts_now = new Timestamp(date.getTime());
System.out.println(">>>>>>"+date);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(ts_now.getTime());
cal.add(Calendar.SECOND, Integer.parseInt(Value.toString()));
Timestamp later = new Timestamp(cal.getTime().getTime());
System.out.println(">>>>>>"+later);
我尝试使用 X ,Z 但出现了类似
的错误
Exception in thread "main" java.text.ParseException: Unparseable date: "2016-11-30T00:06:42+05:30"
at java.text.DateFormat.parse(DateFormat.java:366)
at oneraise.radis.thread.mavenproject1.ParseJson.main(ParseJson.java:48)
我是 java 的新手,谁能帮帮我
谢谢
这是您提供的字符串的格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
SimpleDateFormat outputFormat = new SimpleDateFormat("HH:mm");
Date date;
try
{
这里我已经解析了你提供的字符串。如果你想要当前时间,使用 date = new Date();
date = sdf.parse("2016-11-30T00:06:42+05:30");
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
这里我添加了你的间隔
cal.add(Calendar.SECOND, 32700);
System.out.println(cal.getTime());
String output = outputFormat.format(date);
System.out.println(output);
String output2 = outputFormat.format(cal.getTime());
System.out.println(output2);
}
catch (ParseException e)
{
e.printStackTrace();
}
这是输出。我在不同的时区。
11 月 29 日星期二13:06:42CST 2016
11 月 29 日星期二22:11:42CST 2016
13:06
22:11
如果在您的代码中我将日期格式的初始化更改为:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
— 我将计算机的时区设置为 IST,得到以下输出:
>>>>>>Wed Nov 30 00:06:42 IST 2016
>>>>>>2016-11-30 09:11:42.0
或者,您可以使用 Java 8 次 classes,但如果这是您需要的,请转换为良好的旧 Timestamp
。编辑:感谢 Basil Bourque 正确指出 OffsetDateTime
是要使用的 class,以及转换为时间戳的方法。查看他的回答以获得完整的解释。
Instant laterInstant = OffsetDateTime.parse(startTime.toString())
.plusSeconds(Integer.parseInt(value.toString()))
.toInstant();
Timestamp ts = Timestamp.from(laterInstant);
System.out.println(ts);
这会打印:
2016-11-30 09:11:42.0
我相信以上内容可以满足您的需求。
tl;博士
OffsetDateTime.parse( "2016-11-30T00:06:42+05:30" )
.plus( Duration.ofSeconds( 32_700L ) )
详情
避免麻烦和混乱的日期时间 classes,例如 java.util.Date
和 Calendar
,现在是遗留的,被 java.time classes 取代.
您输入的字符串符合标准 ISO 8601 格式。这样的字符串可以直接被java.time classes解析,不需要指定格式化模式
解析为 OffsetDateTime
对象。
OffsetDateTime odt = OffsetDateTime.parse( "2016-11-30T00:06:42+05:30" );
在另一个答案中使用的ZonedDateTime
class在这里是不合适的。此输入字符串仅包含 offset-from-UTC, not a full time zone such as Asia/Kolkata
。所以 OffsetDateTime
是这里要使用的 class。
Duration
class 处理您的时间跨度,秒数。
Duration d = Duration.ofSeconds( 32_700L );
添加到您的日期时间对象。
OffsetDateTime odtLater = odt.plus( d );
提示:要查看 UTC 中的 OffsetDateTime
值,请提取 Instant
.
Instant instant = odt.toInstant();
数据库
对于数据库访问,您的 JDBC 4.2 兼容驱动程序可以通过 get/setObject 方法使用 java.time 对象。
如果是这样,则无需使用旧 java.sql.Timestamp
class 或其兄弟姐妹。
myPreparedStatement.setObject( … , odt );
如果不是,请使用添加到旧日期-lime 中的新转换方法。classes。
java.sql.Timestamp ts = java.sql.Timestamp.from( odt.toInstant() );
我有一个名为时间的字符串变量 2016-11-30T00:06:42+05:30
和持续时间 32700 即 545 分钟。
我想给上面的字符串时间戳添加持续时间,需要计算开始时间和结束时间。
所以我想得到 StartTime:00:06 和 EndTime:09:05.
我试过了但是没用
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date date = sdf.parse(startTime.toString());
Timestamp ts_now = new Timestamp(date.getTime());
System.out.println(">>>>>>"+date);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(ts_now.getTime());
cal.add(Calendar.SECOND, Integer.parseInt(Value.toString()));
Timestamp later = new Timestamp(cal.getTime().getTime());
System.out.println(">>>>>>"+later);
我尝试使用 X ,Z 但出现了类似
的错误Exception in thread "main" java.text.ParseException: Unparseable date: "2016-11-30T00:06:42+05:30"
at java.text.DateFormat.parse(DateFormat.java:366)
at oneraise.radis.thread.mavenproject1.ParseJson.main(ParseJson.java:48)
我是 java 的新手,谁能帮帮我
谢谢
这是您提供的字符串的格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
SimpleDateFormat outputFormat = new SimpleDateFormat("HH:mm");
Date date;
try
{
这里我已经解析了你提供的字符串。如果你想要当前时间,使用 date = new Date();
date = sdf.parse("2016-11-30T00:06:42+05:30");
System.out.println(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
这里我添加了你的间隔
cal.add(Calendar.SECOND, 32700);
System.out.println(cal.getTime());
String output = outputFormat.format(date);
System.out.println(output);
String output2 = outputFormat.format(cal.getTime());
System.out.println(output2);
}
catch (ParseException e)
{
e.printStackTrace();
}
这是输出。我在不同的时区。
11 月 29 日星期二13:06:42CST 2016
11 月 29 日星期二22:11:42CST 2016
13:06
22:11
如果在您的代码中我将日期格式的初始化更改为:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
— 我将计算机的时区设置为 IST,得到以下输出:
>>>>>>Wed Nov 30 00:06:42 IST 2016
>>>>>>2016-11-30 09:11:42.0
或者,您可以使用 Java 8 次 classes,但如果这是您需要的,请转换为良好的旧 Timestamp
。编辑:感谢 Basil Bourque 正确指出 OffsetDateTime
是要使用的 class,以及转换为时间戳的方法。查看他的回答以获得完整的解释。
Instant laterInstant = OffsetDateTime.parse(startTime.toString())
.plusSeconds(Integer.parseInt(value.toString()))
.toInstant();
Timestamp ts = Timestamp.from(laterInstant);
System.out.println(ts);
这会打印:
2016-11-30 09:11:42.0
我相信以上内容可以满足您的需求。
tl;博士
OffsetDateTime.parse( "2016-11-30T00:06:42+05:30" )
.plus( Duration.ofSeconds( 32_700L ) )
详情
避免麻烦和混乱的日期时间 classes,例如 java.util.Date
和 Calendar
,现在是遗留的,被 java.time classes 取代.
您输入的字符串符合标准 ISO 8601 格式。这样的字符串可以直接被java.time classes解析,不需要指定格式化模式
解析为 OffsetDateTime
对象。
OffsetDateTime odt = OffsetDateTime.parse( "2016-11-30T00:06:42+05:30" );
在另一个答案中使用的ZonedDateTime
class在这里是不合适的。此输入字符串仅包含 offset-from-UTC, not a full time zone such as Asia/Kolkata
。所以 OffsetDateTime
是这里要使用的 class。
Duration
class 处理您的时间跨度,秒数。
Duration d = Duration.ofSeconds( 32_700L );
添加到您的日期时间对象。
OffsetDateTime odtLater = odt.plus( d );
提示:要查看 UTC 中的 OffsetDateTime
值,请提取 Instant
.
Instant instant = odt.toInstant();
数据库
对于数据库访问,您的 JDBC 4.2 兼容驱动程序可以通过 get/setObject 方法使用 java.time 对象。
如果是这样,则无需使用旧 java.sql.Timestamp
class 或其兄弟姐妹。
myPreparedStatement.setObject( … , odt );
如果不是,请使用添加到旧日期-lime 中的新转换方法。classes。
java.sql.Timestamp ts = java.sql.Timestamp.from( odt.toInstant() );