Как создать и использовать DateFormat с заданной датой в другой аннотации? - PullRequest
2 голосов
/ 05 августа 2020

Получите подробную информацию о Отправлении с предполагаемой датой доставки. Также получите номер статуса отгрузки, доступный для этой отгрузки, то есть количество промежуточных переходов. Напишите программу для сравнения ожидаемой даты в окончательном статусе отгрузки и фактической ожидаемой даты отгрузки и покажите, прибыло ли отправление «вовремя», «до» или «после» ожидаемой даты.

public class ShipmentMain {

    public static void main(String[] args) {
        
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        
        System.out.println("Enter the shipment details :");
        Scanner sc = new Scanner(System.in);
        String userDeatil = sc.next();
        String[] s = userDeatil.split(",");
        
        Shipment shipment = new Shipment();
        ShipmentStatus status = new ShipmentStatus();

        for (int j = 0; j < s.length; j++) {
            
            if (j == 0) {
            shipment.setid(s[j]);
            } else if (j == 1) {
            shipment.setsourcePort(s[j]);
            } else if (j == 2) {
            shipment.setdestinationPort(s[j]);
            } else if (j == 3) {
            shipment.setexpectedDeliveryDate(s[j]);
            } else if (j == 4) {
            shipment.setcustomerName(s[j]);
            } 
        
        }
    }
}

Пример ввода и вывода 1:

Enter the shipment details :
STAJU01,Hong Kong,Cochin,20-05-2017,karthick

Я не могу ввести данные в поле даты. Подскажите, пожалуйста, как я могу это ввести.

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

Вы можете вырезать первые два символа из строки и сохранить ее, преобразовать значение в int или что-то в этом роде. Затем вы можете вырезать символ «-» и перейти к следующему после int Chars. В итоге нужно отрезать четыре цифры. После этого вы можете легко добавить его к своей дате и сравнить с другими. (Например, Date.Format.SHORT)

0 голосов
/ 05 августа 2020

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

Первый пункт: используйте Scanner#nextLine вместо Scanner#next в качестве Scanner#next остановит сканирование после обнаружения первого пробела, т.е. будет сканировать только до STAJU01, Hong для ввода, STAJU01, Гонконг, Кочин, 20-05-2017, karthick

Демо:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the shipment details: ");

        // Use Scanner#nextLine to scan the full line
        String userDetail = sc.nextLine();

        String userDetailParts[] = userDetail.split(",");
        System.out.println(Arrays.toString(userDetailParts));
    }
}

Пробный запуск:

Enter the shipment details: STAJU01,Hong Kong,Cochin,20-05-2017,karthick
[STAJU01, Hong Kong, Cochin, 20-05-2017, karthick]

Попробуйте запустить этот код с тот же ввод после изменения sc.nextLine() на sc.next(), и вы поймете разницу.

После разделения ввода на массив вы можете получить доступ к элементам, используя их индексы, например, используя userDetailParts[3], вы можете получить доступ строка даты. for l oop в вашем коде не требуется.

Второй момент: не используйте устаревший API даты и времени, например java.util.Date и java.text.DateFormat. Вместо этого используйте современный API даты и времени . Подробнее об этом можно узнать из След: Дата Время .

Демо:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String args[]) {
        // Given date string
        String dateStr = "20-05-2017";

        // Define the pattern for formatting
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
        LocalDate date = LocalDate.parse(dateStr, inputFormatter);
        System.out.println(date);

        // Now, if you want to print the date in some other format, you can define the
        // format accordingly e.g.
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("EEEE MMMM dd, yyyy");
        String formatted = outputFormatter.format(date);
        System.out.println(formatted);
    }
}

Вывод:

2017-05-20
Saturday May 20, 2017

Однако, если вы по-прежнему настаиваете на использовании устаревшего API для даты и времени и его форматирования, вы можете сделать это следующим образом:

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

public class Main {
    public static void main(String args[]) throws ParseException {
        // Given date string
        String dateStr = "20-05-2017";

        // Define the pattern for formatting
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        Date date = sdf.parse(dateStr);

        // Print date using the default format (i.e. Date#toString)
        System.out.println(date);

        // Print date using your custom format
        System.out.println(sdf.format(date));
    }
}

Выход:

Sat May 20 00:00:00 BST 2017
20-05-2017
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...