2016-09-04 6 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の8以降java.util.Dateと関連するクラスを置き換え、日付と時刻の処理のための機能の多くを追加しましたjava.time APIを使用することができますフォーマット。あなたのケースでは:

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に記載されています。 java.time APIの概要と、それがjava.util.Dateの代わりに作成された理由については、 https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

+0

良い答え。 1つの提案された変更点:タイムライン上で[OffsetDateTime'](https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html) UTC(GMT)などのUTC。 'ZonedDateTime'クラスは単なるオフセットではなくフルタイムゾーンを割り当てるクラスです。タイムゾーンは、夏時間(DST)などの異常を処理するためのオフセット*プラス*のルールです。また、 'ZoneId.of(" GMT ")ではなく、UTCのための便利な定数、' ZoneOffset.UTC'があります。 –

関連する問題