Как преобразовать ггг / мм / сс чч: мм: сс в секунды? - PullRequest
0 голосов
/ 23 мая 2019

Введение

Я пытаюсь получить разницу в секундах от двух эпох

1009 * то есть *

2019-05-22 18:28:56 -> 1558542536 секунд

2019-07-22 19:00:00 -> 1563814800 секунд

Разница будет: 5,272,264 секунды

Этот формат даты происходит из двоичного файла в виде строки

Мой код

public static void main(String[] args) throws ParseException
{
    String regEpoch = "";
    long result = 0;

    //System.out.println((fecha = dateFormat.format(date)));


    try(RandomAccessFile raf = new RandomAccessFile("binario2.txt", "rw")){
      //user inputs a code (for now, doesn't matter if exists or not)
      System.out.print("Input a code to look for: ");
        String code = scan.next();
            while(!code.matches("\\d+"))
            {
                System.out.println("[ERROR] Only digits accepted");
                System.out.print("Input a code to look for: ");
                    code = scan.next();
            }


        //Gets the current date in seconds
        long getSecs = (new Date().getTime())/1000;
        System.out.println("Current tiem in secs: " + getSecs);

        //We are "randomly accessing" a binary file. The is no problem here at all. It just works.
        //Sets the pointer where I want it, again... this works fine.
        raf.seek(27+(80*Integer.parseInt(code)));

        //Read the String date correctly, which is 2019-05-22 18:28:56
        System.out.println(raf.readUTF());

        /*
        //Attempt 2
        System.out.println(java.time.Instant.ofEpochSecond(Long.parseLong(raf.readUTF())));

        Long millis = new SimpleDateFormat("yyyy/MM/ss hh:mm:ss").parse(raf.readUTF()).getTime();
        System.out.println(millis);
        */

        //Let's try to convert it into seconds... No we can't due to -> Unparseable date: "2019-05-22 18:28:56"
        Date dt = dateFormat.parse(raf.readUTF());
        long epoch = dt.getTime();
        System.out.println("Result is: " + (int)(epoch*1000));




    }catch(IOException e){System.out.println("[ERROR] " + e);} 
}

Проблема

Я прочитал много вопросов о том, как превратить секунды в эпоху, но как насчет обратного?

  • Нужно ли делать это вручную?
  • Есть ли какая-нибудь библиотека, о которой я не слышал?

Пока что то, что я пробовал, получает только секунды от Date с SimpleDateFormat, но это не то, что я ожидал ...

Что я ожидаю от этого

В настоящее время я делаю домашнее задание, и мне нужно было рассчитать стоимость парковочного талона, и я подумал, а что, если машина не уедет, скажем ... через неделю?

Если я работаю только в формате hh:mm:ss, те автомобили, которые останутся там целую неделю, будут платить только за один день.

Ответы [ 3 ]

5 голосов
/ 23 мая 2019

ChronoUnit

Я всегда использую ChronoUnit для подобных расчетов.Работает отлично.

package test;

import java.text.ParseException;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class Test2 {

    public static void main(String[] args) throws ParseException {

        LocalDateTime date1 = LocalDateTime.parse("2019-05-22T18:58:56");
        LocalDateTime date2 = LocalDateTime.parse("2019-05-23T19:00:00"); //LocalDateTime.now();

        long seconds = ChronoUnit.SECONDS.between(date1, date2);

        System.out.println(seconds);
    }

}

Вывод

86464

Для преобразования в дату с помощью SimpleDateFormat вы можете увидеть, например, Javaвремя с эпохи

2 голосов
/ 23 мая 2019

Duration

Пусть java.time классы вычисляют Duration.

Разбор вашего ввода после настройки на стандартный формат ISO 8601.

LocalDateTime ldtStart = LocalDateTime.parse( "2019-05-22 18:28:56".replace( " " , "T" ) ) ;

Часовой пояс

Укажите часовой пояс, чтобы учесть такие аномалии, как переход на летнее время (DST). Дни не всегда 24 часа.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdtStart = ldtStart.atZone( z ) ;

Рассчитать продолжительность.

Duration d = Duration.between( zdtStart , zdtStop ) ;

long seconds = d.toSeconds() ;  // Or `getSeconds` before Java 9.

Для оплаты парковки вам, скорее всего, нужны часы.

long hours = d.toHours() ; 
1 голос
/ 23 мая 2019

Это должно работать

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2019-05-22 18:28:56").getTime();
...