在date.gettime()中获得负值

时间:2018-12-20 07:46:29

标签: android date simpledateformat datetime-format

面对一个问题,其中我试图将字符串值解析为date,而当我尝试进行date.getTime()时,我得到的是负值。

这是我正在解析的字符串“ 01:00:07”。 这是日期对象中的值,我得到的是“ Thu Jan 01 01:00:07 GMT + 05:30 1970”。 仍然在getTime()中,我得到的是负值“ -16193000”

实现此目的的代码:

npm install style-loader --save-dev
npm install css-loader --save-dev

4 个答案:

答案 0 :(得分:1)

问题是TimeZone。通过提供TimeZone

,您将获得正确的时间
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

答案 1 :(得分:1)

java.time

    String durationString = "01:00:07";
    durationString = durationString
            .replaceFirst("(\\d{2}):(\\d{2}):(\\d{2})", "PT$1H$2M$3S");
    Duration dur = Duration.parse(durationString);
    System.out.println(dur);

Duration输出以下奇数字符串:

  

PT1H7S

读取为: 1小时7秒

该字符串为标准ISO 8601格式。 Duration只能解析标准格式。因此,我正在使用String.replaceFirst将您的字符串转换为它。

让我猜猜,您需要总结持续时间吗?有一种plus方法:

    Duration sum = Duration.ZERO;
    sum = sum.plus(dur);

还有一些转换为秒或毫秒的方法。

在一段时间内不要使用日期时间类。这会导致混乱和错误。

如果您绝对不希望有外部依赖关系(仅在移至API级别26之前),请手动将字符串解析为秒,并以int表示。将其包装在您自己的自定义类中。

问题:我可以在Android上使用java.time吗?

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得ThreeTen Backport,即新类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

答案 2 :(得分:0)

simpleDateFormat .setTimeZone(TimeZone.getTimeZone("GMT"));您必须添加时区

答案 3 :(得分:0)

问题是时区偏移。使用:

long sum = 0;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:ss");// I have also tried "HH:mm:ss" format. it gives same result
Date date = null;//duration is "01:00:07"
try {
    date = simpleDateFormat.parse("01:00:07");
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    sum= cal.getTimeInMillis() + (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET));
    System.out.println("Date =" + date);
    System.out.println("sum =" + sum);
} catch (ParseException e) {
    e.printStackTrace();
}