Java转换字符串,具有毫秒到日期的对象

Java转换字符串,具有毫秒到日期的对象,java,string,date,Java,String,Date,我有两条线 2012-06-25 15:02:22.948 +0530 我需要一个新字符串,它将5:30添加到第一个字符串中的时间 我想我可以通过将两个字符串转换为日期对象,然后添加。但我不知道怎么做,因为当我使用 yyyy-MM-dd hh:MM:ss作为第一个字符串的日期格式,我得到一个错误 谢谢 字符串2012-06-25 15:02:22.948的格式不是yyyy-MM-dd hh:MM:ss,因此您会遇到“错误”也就不足为奇了(错误是什么?您越具体,人们就越能帮助您!) 请尝试yy

我有两条线

  • 2012-06-25 15:02:22.948
  • +0530
我需要一个新字符串,它将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
。请参阅以了解格式字符串的确切语法


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

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

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


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

由于您的日期格式字符串错误,因此出现异常。您在表单上提供了一个日期字符串

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

请参见

您收到一个异常,因为您的日期格式字符串错误。您在表单上提供了一个日期字符串

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

请参见

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

您可以合并字符串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());
试试这个:

    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.time 与最早版本的java捆绑在一起的旧日期时间类(java.util.date/.Calendar等)现在是遗留的

那些旧的课程已经被这个包取代了。看见许多功能已在中向后移植到Java6和Java7,并在中进一步适应Android

LocalDateTime
该类表示没有时区的日期时间。第一件就用这些

您的格式接近标准格式,只需将空格替换为
T

String input = "2012-06-25 15:02:22.948";
String inputStandardized = input.replace( " " , "T" );
LocalDateTime ldt = LocalDateTime.parse( inputStandardized );
与UTC的偏移量 另一件是。我们使用这个类来实现这一点

ZoneOffset offset = ZoneOffset.of( "+0530" );
如果没有偏移量或时区,
LocalDateTime
不是时间线上的实际时刻,而是关于可能时刻的粗略概念。现在,我们添加您的来标记一个实际的时刻,由类表示

分区 时区是偏移量加上处理异常(如夏令时(DST))的规则。因此,使用时区比仅仅使用偏移要好

例如,如果已知此数据的上下文为,请使用时区(例如)来获取


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

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

那些旧的课程已经被这个包取代了。看见许多功能已在中向后移植到Java6和Java7,并在中进一步适应Android

LocalDateTime
该类表示没有时区的日期时间。第一件就用这些

您的格式接近标准格式,只需将空格替换为
T

String input = "2012-06-25 15:02:22.948";
String inputStandardized = input.replace( " " , "T" );
LocalDateTime ldt = LocalDateTime.parse( inputStandardized );
与UTC的偏移量 另一件是。我们使用这个类来实现这一点

ZoneOffset offset = ZoneOffset.of( "+0530" );
如果没有偏移量或时区,
LocalDateTime
不是时间线上的实际时刻,而是关于可能时刻的粗略概念。现在,我们添加您的来标记一个实际的时刻,由类表示

分区 时区是偏移量加上处理异常(如夏令时(DST))的规则。因此,使用时区比仅仅使用偏移要好

例如,如果已知此数据的上下文为,请使用时区(例如)来获取


您的答案如下:但我无法将字符串正确解析为日期对象。我认为这是因为22.948,小数点,它们是毫秒…您需要使用yyyy-MM-dd hh:MM:ss.SSS作为格式。前面的注释是一个很好的开始方式。此外,您还收到一个错误,因为您的第一个字符串是“yyyy-MM-dd hh:MM:ss.SSS”格式,而不是您提供的格式。此外,您的第二个字符串似乎表示时区…这指定了IST时区。我希望这为您清除了获得所需输出的方法。您的答案如下:但我无法将我的字符串正确解析为日期对象。我认为这是因为22.948,小数点,它们是毫秒…您需要使用yyyy-MM-dd hh:MM:ss.SSS作为格式。前面的注释是一个很好的开始方式。您还将收到一个错误,因为您的第一个字符串是“yyyy-MM-dd hh:MM:ss.SSS”格式,而不是您提供的格式。此外,您的第二个字符串似乎表示时区…这指定了IST时区。我希望这为您清除了获得所需输出的方法