2012-03-08 13 views
2

Javaでコードを作成しようとしていますが、指定された次の定期的な時刻の日付を特定できます。これは説明が難しいので、私は例を挙げます。 3月1日(木曜日)で、ユーザーが次の土曜日の5時がコードであることを知りたい場合は、Date変数として3月3日、5:00を出力し、3月4日の場合は3月10日など...次の月曜日のJava日付の検索6:00、たとえば

ユーザーは、希望する時間帯を指定できます。これはミリ秒単位で木曜日の0:00から週の時刻をオフセットする長い値で行われます。私はこれを回避するのに問題がありますが、これは私がこれまでに得たものです:

public static long findNextTimeOfTheWeek(long offset) 
{ 
    return System.currentTimeMillis() - ((System.currentTimeMillis() - offset) % 604800000) + 604800000; 
} 

誰でも助けてくれれば幸いです。それ以上の明確化が必要な場合は、ただ聞いてください。 P.S. 604800000は、1週間のミリ秒数です。

+1

本当の答えのためにあまりにも忙しく、 [カレンダークラス](http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html)が参考になる場合があります。 –

+1

[Joda Time](http://joda-time.sourceforge.net/)をチェックすると、人生がずっと楽になります。これは難しいことではないようです。具体的な質問がある場合は、もう少しお試しいただき、フォローアップを投稿してください。 –

+0

ねえ、情報ありがとう。入ってくるサマータイムが何とか私を台無しにしているようです。なぜか分かりませんが、私のシステム時間を4月4日に変更したとき、コードは正常に実行されているようです。とにかく、ありがとうagain – PeteyPii

答えて

0

Calendarクラスを使用することをお勧めします。それを簡単に操作し、Calendar#getTimeを使用してDateオブジェクトを取得することができます。

import java.util.Calendar; 
import java.util.Locale; 
import java.util.Scanner; 

public class Main { 

    public static int dayOfWeekIWant(final String dayOfWeekIWantString) 
      throws Exception { 

     final int dayOfWeekIWant; 

     if ("sunday".equalsIgnoreCase(dayOfWeekIWantString)) { 
      dayOfWeekIWant = Calendar.SUNDAY; 
     } else if ("monday".equalsIgnoreCase(dayOfWeekIWantString)) { 
      dayOfWeekIWant = Calendar.MONDAY; 
     } else if ("tuesday".equalsIgnoreCase(dayOfWeekIWantString)) { 
      dayOfWeekIWant = Calendar.TUESDAY; 
     } else if ("wednesday".equalsIgnoreCase(dayOfWeekIWantString)) { 
      dayOfWeekIWant = Calendar.WEDNESDAY; 
     } else if ("thursday".equalsIgnoreCase(dayOfWeekIWantString)) { 
      dayOfWeekIWant = Calendar.THURSDAY; 
     } else if ("friday".equalsIgnoreCase(dayOfWeekIWantString)) { 
      dayOfWeekIWant = Calendar.FRIDAY; 
     } else if ("saturday".equalsIgnoreCase(dayOfWeekIWantString)) { 
      dayOfWeekIWant = Calendar.SATURDAY; 
     } else { 
      throw new Exception(
        "Invalid input, it must be \"DAY_OF_WEEK HOUR\""); 
     } 

     return dayOfWeekIWant; 
    } 

    public static String getOrdinal(int cardinal) { 
     String ordinal = String.valueOf(cardinal); 

     switch ((cardinal % 10)) { 
     case 1: 
      ordinal += "st"; 
      break; 
     case 2: 
      ordinal += "nd"; 
      break; 
     case 3: 
      ordinal += "rd"; 
      break; 
     default: 
      ordinal += "th"; 
     } 

     return ordinal; 

    } 

    public static void printDate(Calendar calendar) { 
     String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK, 
       Calendar.LONG, Locale.ENGLISH); 
     String dayOfMonth = getOrdinal(calendar.get(Calendar.DAY_OF_MONTH)); 
     int hour = calendar.get(Calendar.HOUR_OF_DAY); 
     int minute = calendar.get(Calendar.MINUTE); 
     System.out.printf("%s %s %02d:%02d", dayOfWeek, dayOfMonth, hour, minute); 
    } 

    public static void main(String[] args) { 

     Calendar calendar = Calendar.getInstance(); 
     Scanner scanner = new Scanner(System.in); 

     final int today = calendar.get(Calendar.DAY_OF_WEEK); 

     System.out.println("Please, input the day of week you want to know:"); 

     boolean inputOk = false; 

     while (!inputOk) 

      try { 
       String input = scanner.nextLine(); 
       String[] split = input.split("\\s"); 
       String dayOfWeekIWantString = split[0]; 

       String[] splitHour = split[1].split(":"); 
       int hour = Integer.parseInt(splitHour[0]); 
       int minute = Integer.parseInt(splitHour[1]); 

       int dayOfWeekIWant = dayOfWeekIWant(dayOfWeekIWantString); 

       int diff = (today >= dayOfWeekIWant) ? (7 - (today - dayOfWeekIWant)) 
         : (dayOfWeekIWant - today); 

       calendar.add(Calendar.DAY_OF_WEEK, diff); 
       calendar.set(Calendar.HOUR_OF_DAY, hour); 
       calendar.set(Calendar.MINUTE, minute); 
       calendar.set(Calendar.SECOND, 0); 
       calendar.set(Calendar.MILLISECOND, 0); 

       inputOk = true; 

      } catch (Exception e) { 

       // Using a generic exception just for explanation purpose 
       // You must create a specific Exception 
       System.out 
         .println("Invalid input, you must enter a valid input in format: \"DAY_OF_WEEK HOUR\""); 
       continue; 
      } 

     printDate(calendar); 

    } 
} 

詳細情報:

0

をあなたがクラスをカレンダーする必要があり、それは単にあなたがやりたいことは、以下の例を参照してください。 ITSの日曜日 日=日3月6日5時00分00秒MST 2011

は、Calendarクラスを確認します。結果がなる日、月または年

//Here you specify the date the constructor are (year,month,day,hour_od_day,minutes) 
     Calendar calendar = new GregorianCalendar(2011, Calendar.MARCH, 1, 5, 0); 
     calendar.add(Calendar.DAY_OF_MONTH, 5); //Adds five days to the date 
     switch (calendar.get(Calendar.DAY_OF_WEEK)) { //Tells to the calendar that i want to know the day of the week 
      case Calendar.SUNDAY: 
       System.out.println("ITS SUNDAY"); 
       break; 
      case Calendar.MONDAY: 
       System.out.println("ITS MONDAY"); 
       break; 
      case Calendar.TUESDAY: 
       System.out.println("ITS TUESDAY"); 
       break; 
      case Calendar.WEDNESDAY: 
       System.out.println("ITS WEDNESDAY"); 
       break; 
      case Calendar.THURSDAY: 
       System.out.println("ITS THURSDAY"); 
       break; 
      case Calendar.FRIDAY: 
       System.out.println("ITS FRIDAY"); 
       break; 
      case Calendar.SATURDAY: 
       System.out.println("ITS SATURDAY"); 
       break; 
     } 
     Date date = calendar.getTime(); //Get the Date object 
     System.out.println("Date = " + date); //prints the date: 

を追加あなたは、日付を指定して、あなたは、CN: http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html

あなたはDateオブジェクトは、DateFormatのクラスを確認するフォーマットしたい場合:http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html

4

java.time

場合でも、あなたが本当に週の翌日が必要な場合はJavaの8

import java.time.DayOfWeek; 
import java.time.LocalDateTime; 
import static java.time.temporal.TemporalAdjusters.nextOrSame; 

LocalDateTime now = LocalDateTime.now(); // 2015-11-22T09:32:50.045 (Sunday) 
now.with(nextOrSame(DayOfWeek.MONDAY)); // 2015-11-23T09:32:50.045 (Monday) 

に組み込まれjava.timeフレームワークを使用して、現在の日付を満たすあなたが使用することができ、この制約

import static java.time.temporal.TemporalAdjusters.next; 

now.with(next(DayOfWeek.MONDAY)); // 2015-11-30T09:32:50.045 (Monday) 
関連する問題