28
Июл
2021

Как при выводе на консоль в Java убрать дополнительные часы текущего часового пояса к UTC?

Дано количество секунд int seconds, которое вводится с консоли. Надо вывести в консоль текущее время в формате h:mm:ss (possible values: [0:00:00; 23:59:59]). Как можно убрать из вывода на консоль добавление 3 часов, которые, как я полагаю, добавляются к UTC? Вывод (при вводе 60 секунд): Expected :0:01:00 Actual :3:01:00 Тесты не проходят из-за того, что почему-то добавляются дополнительные 3 часа. Как это можно исправить?

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class ElectronicWatch {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int seconds = scanner.nextInt();

        Date currentDate = new Date(seconds * 1000);
        SimpleDateFormat sdf = new SimpleDateFormat("h:mm:ss");
        System.out.println(sdf.format(currentDate));
    }
}

Тесты:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;


class ElectronicWatchTest {

    @ParameterizedTest
    @MethodSource("testCases")
    void test(int input, String expected) {

        String inputText = Integer.toString(input);

        final ByteArrayInputStream controlledIn = new ByteArrayInputStream(inputText.getBytes(StandardCharsets.UTF_8));
        InputStream defaultIn = System.in;

        final ByteArrayOutputStream sink = new ByteArrayOutputStream();
        PrintStream controlledOut = new PrintStream(sink);
        PrintStream defaultOut = System.out;

        try {
            System.setIn(controlledIn);
            System.setOut(controlledOut);

            ElectronicWatch.main(new String[]{});

            controlledOut.flush();
            assertEquals(expected, sink.toString().trim(), "Error on input value: " + input);
        } finally {
            System.setIn(defaultIn);
            System.setOut(defaultOut);
        }
    }

    static Stream<Arguments> testCases() {
        return Stream.of(
                Arguments.of(60, "0:01:00"),
                Arguments.of(3599, "0:59:59"),
                Arguments.of(86229, "23:57:09"),
                Arguments.of(86400, "0:00:00"),
                Arguments.of(89999, "0:59:59"),
                Arguments.of(86460, "0:01:00"),
                Arguments.of(1, "0:00:01"),
                Arguments.of(10, "0:00:10"),
                Arguments.of(11, "0:00:11"),
                Arguments.of(70, "0:01:10"),
                Arguments.of(71, "0:01:11"),
                Arguments.of(3601, "1:00:01")
        );
    }
}

Источник: https://ru.stackoverflow.com/questions/1309755/%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%B8-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5-%D0%BD%D0%B0-%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C-%D0%B2-java-%D1%83%D0%B1%D1%80%D0%B0%D1%82%D1%8C-%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D1%87%D0%B0%D1%81%D1%8B-%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B3%D0%BE-%D1%87%D0%B0%D1%81%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D0%BE

Тебе может это понравится...

Добавить комментарий