[英]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.