1

我有 2 个字符串

  • 2012-06-25 15:02:22.948
  • +0530

我需要一个新字符串,它将 5:30 添加到第一个字符串中的时间。

我想我可以通过将两个字符串都转换为日期对象然后添加来做到这一点。但我不知道该怎么做,就像我使用时一样

yyyy MM dd hh:mm:ss 作为第一个字符串的日期格式,我得到一个错误。

谢谢!

4

5 回答 5

3

字符串的格式2012-06-25 15:02:22.948不是yyyy MM dd hh:mm:ss,因此出现“错误”也就不足为奇了(这是什么错误?越具体,人们就能更好地帮助您!)。

试试yyyy-MM-dd HH:mm:ss.SSS。请参阅API 文档SimpleDateFormat以了解格式字符串的确切语法。

注意:大写和小写在格式字符串中很重要。hh表示 12 小时制,HH表示 24 小时制。如果您使用,则无法hh解析小时数。15您也没有SSS在格式字符串中包含毫秒。

于 2012-07-04T07:52:42.250 回答
2

您可以合并您的字符串 String1+string2 并且可以使用格式yyyy-MM-dd HH:mm:ss.SSSZ来解析日期。您可以在此处查看更多文档

于 2012-07-04T08:03:41.793 回答
0

尝试这个:

    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());
于 2012-07-04T08:53:51.027 回答
0

你得到一个例外,因为你的日期格式字符串是错误的。你在表格上给出了一个日期字符串

"yyyy-MM-dd hh:mm:ss.S"

请参阅SimpleDateFormat javadoc

于 2012-07-04T07:53:06.920 回答
0

其他答案是正确的,但已过时。

java.time

与 Java 的最早版本捆绑在一起的旧日期时间类(java.util.Date/.Calendar 等)现在是遗留的。

那些旧类已被java.time包所取代。请参阅Oracle 教程。大部分功能已在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP进一步适应 Android 。

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 的偏移量

另一部分是offset-from-UTC。我们为此使用ZoneOffset该类。

ZoneOffset offset = ZoneOffset.of( "+0530" );

如果没有偏移或时区,LocalDateTime不是时间线上的实际时刻,而是关于可能时刻的粗略想法。现在我们添加您的从 UTC 偏移量OffsetDateTime来标记一个由类表示的实际时刻。

OffsetDateTime odt = OffsetDateTime.of( ldt , offset );

分区

时区是一个偏移量加上处理异常的规则,例如夏令时 (DST)。所以最好使用时区而不是仅仅使用偏移量。

例如,如果已知此数据的上下文是India的时间,请使用时区,例如Asia/Kolkata获取ZonedDateTime.

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = odt.atZoneSameInstant( zoneId );
于 2016-06-29T01:55:53.067 回答