2016-09-04 1 views
-1

Я хочу, чтобы иметь возможность вводить дату, как в приведенном ниже коде, а также печатать день в следующем формате: «Sun Jan 01 00:00: 00 GMT 2017 «Я также хочу сохранить день недели в строковой переменной. Я был бы чрезвычайно благодарен всем, кто мог бы помочь в этом. Спасибо заранее!Как найти и сохранить день недели в строке

import java.util.*; 
import java.text.*; 

public class Run { 
    public static void main(String args[]) { 

    try { 
     Scanner kb = new Scanner (System.in); 
     System.out.println("Please enter day of deadline: "); 
     String day = kb.nextLine(); 
     System.out.println("Please enter month of deadline: "); 
     String month = kb.nextLine(); 
     System.out.println("Please enter year of deadline: "); 
     String year = kb.nextLine(); 

     String complete = (""+day+month+year); 

     Date date = new SimpleDateFormat ("ddMMyyyy").parse(complete); 
     System.out.println(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

Изменить формат даты. Прочитайте документы 'SimpleDateFormat' – ifly6

+2

здесь: http://stackoverflow.com/questions/5270272/how-to-determine-day-of-week-by-passing-specific-date –

ответ

2

Ваш код не будет работать. Что делать, если пользователь вводит 1, 1, 2017? Затем вы получите 112017, и это не будет правильно разобрать.

Лучший способ заключается в использовании Java 8 LocalDate:

LocalDate date = LocalDate.of(Integer.parseInt(year), 
           Integer.parseInt(month), 
           Integer.parseInt(day)); 
String dayOfWeek = date.getDayOfWeek() 
         .getDisplayName(TextStyle.SHORT_STANDALONE, 
             Locale.getDefault()); 
System.out.println(dayOfWeek); // prints "Sun" for 1/1/2017 (English locale) 
1

Вы можете использовать java.time API, который вытеснил java.util.Date и связанные с ним классы, так как Java 8 и добавили много функциональных возможностей для даты и времени обработки, в том числе форматирование. В вашем случае:

Scanner kb = new Scanner(System.in); 
System.out.println("Please enter day of deadline: "); 
String day = kb.nextLine(); 
System.out.println("Please enter month of deadline: "); 
String month = kb.nextLine(); 
System.out.println("Please enter year of deadline: "); 
String year = kb.nextLine(); 

LocalDate date = LocalDate.of(Integer.parseInt(year), Integer.parseInt(month), Integer.parseInt(day)); 

ZonedDateTime datetime = ZonedDateTime.of(date, LocalTime.of(0, 0, 0), ZoneId.of("GMT")); 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z yyyy"); 
System.out.println(formatter.format(datetime)); 

Чтобы разработать немного о классах, используемые: В java.time существует несколько классов для представления даты, различая дату, дату со временем, и включена ли информация часового пояса. В приведенном выше примере, в первую очередь, создается объект java.time.LocalDate из строки дня, месяца и года. Затем этот объект преобразуется в java.time.ZonedDateTime, добавляя информацию о времени и часовом поясе (в этом случае 00:00:00 и GMT).

Модели даты-времени, используемые java.time.format.DateTimeFormatter, задокументированы в https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html. Для введения в API java.time и почему он был создан для замены java.util.Date, см., Например, https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

+0

Хороший ответ. Одно предлагаемое изменение: используйте ['OffsetDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html) на временной шкале с назначенным смещением-от- UTC, например, UTC (GMT). Класс 'ZonedDateTime' предназначен для назначения полного часового пояса, а не простого смещения. Часовой пояс - это смещение * плюс * набор правил для обработки аномалий, таких как летнее время (DST). Кроме того, есть удобная константа для UTC, 'ZoneOffset.UTC', а не' ZoneId.of («GMT») '. –

Смежные вопросы