[英]Java converting string, having millisecond to date object
我有2个琴弦
我需要一个新字符串,该字符串将5:30添加到第一个字符串中的时间。
我以为可以通过将两个字符串都转换为日期对象然后添加来做到这一点。 但是我不知道该怎么做
yyyy MM dd hh:mm:ss作为第一个字符串的日期格式,出现错误。
谢谢!
字符串2012-06-25 15:02:22.948
的格式不是yyyy MM dd hh:mm:ss
,因此出现“错误”也就不足为奇了(它是什么错误?您越具体,更好的人可以帮助您!)。
尝试yyyy-MM-dd HH:mm:ss.SSS
。 请参阅SimpleDateFormat
的API文档以了解格式字符串的确切语法。
注意:在格式字符串中,大写和小写都很重要。 hh
表示12小时制, HH
表示24小时制。 如果您使用hh
,则无法解析15
小时。 您还没有在格式字符串中包括毫秒SSS
。
您可以合并字符串String1 + string2,也可以使用格式yyyy-MM-dd HH:mm:ss.SSSZ
来解析日期。 您可以在此处查看更多文档
尝试这个:
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date date = format.parse("2012-06-25 15:02:22.948");
Calendar calendar = new GregorianCalendar();
calendar.setTimeInMillis(date.getTime());
int time = Integer.parseInt("0530");
int hour = time / 100;
int minute = time % 100;
calendar.add(Calendar.HOUR_OF_DAY, hour);
calendar.add(Calendar.MINUTE, minute);
String newDateInString = format.format(calendar.getTime());
其他答案是正确的,但已过时。
现在,与最早的Java版本捆绑在一起的旧的日期时间类(java.util.Date/.Calendar等)已成为历史。
那些旧类已被java.time包所取代。 请参阅Oracle教程 。 许多功能已被后移植到Java 6和7在ThreeTen-反向移植并且还适于在到Android ThreeTenABP 。
LocalDateTime
LocalDateTime
类表示没有时区的日期时间。 将这些用于第一部分。
您的格式接近于标准ISO 8601格式,只需将SPACE替换为T
。
String input = "2012-06-25 15:02:22.948";
String inputStandardized = input.replace( " " , "T" );
LocalDateTime ldt = LocalDateTime.parse( inputStandardized );
另一个是从UTC偏移 。 我们为此使用ZoneOffset
类。
ZoneOffset offset = ZoneOffset.of( "+0530" );
没有偏移量或时区, LocalDateTime
并不是时间轴上的实际时刻,而是关于可能时刻的粗略想法。 现在,我们添加您的UTC偏移量以标记实际时刻,由OffsetDateTime
类表示。
OffsetDateTime odt = OffsetDateTime.of( ldt , offset );
时区是偏移量以及用于处理异常的规则,例如夏令时(DST)。 因此,使用时区比仅使用偏移量更好。
例如,如果已知此数据的上下文是印度的时间,则使用诸如Asia/Kolkata
类的时区来获取ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = odt.atZoneSameInstant( zoneId );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.