0

場所の営業時間を文字列配列で表示する関数を作成したいと考えています。最初のエントリは「例外」で、その他 (1-7) は「day opentime:closetime」と表示されます。

しかし、間違った営業時間が表示されます!
オブジェクトにあるデータの 1 つを示します。

"created_at": "2012-01-03T13:31:53Z",
    "updated_at": "2012-03-02T11:08:36Z",
    "start_timestamp": 1325376000,
    "exception_nl": "",
    "exception_en": "",
    "id": 447,
    "end": "2012-12-31T00:00:00Z",
    "enabled": true,
    "start": "2012-01-01T00:00:00Z",
    "season_openings": [
        {
            "endtime_timestamp": 946749600,
            "created_at": "2012-01-03T13:31:53Z",
            "endtime": "2000-01-01T18:00:00Z",
            "closed": false,
            "day_en": "Monday",
            "updated_at": "2012-03-02T11:08:36Z",
            "id": 3123,
            "day": "Maandag",
            "starttime": "2000-01-01T10:00:00Z",
            "starttime_timestamp": 946720800
        },
        {
            "endtime_timestamp": 946749600,
            "created_at": "2012-01-03T13:31:53Z",
            "endtime": "2000-01-01T18:00:00Z",
            "closed": false,
            "day_en": "Tuesday",
            "updated_at": "2012-03-02T11:08:36Z",
            "id": 3124,
            "day": "Dinsdag",
            "starttime": "2000-01-01T10:00:00Z",
            "starttime_timestamp": 946720800
        },
        {
            "endtime_timestamp": 946749600,
            "created_at": "2012-01-03T13:31:53Z",
            "endtime": "2000-01-01T18:00:00Z",
            "closed": false,
            "day_en": "Wednesday",
            "updated_at": "2012-03-02T11:08:36Z",
            "id": 3125,
            "day": "Woensdag",
            "starttime": "2000-01-01T10:00:00Z",
            "starttime_timestamp": 946720800
        },
        {
            "endtime_timestamp": 946749600,
            "created_at": "2012-01-03T13:31:53Z",
            "endtime": "2000-01-01T18:00:00Z",
            "closed": false,
            "day_en": "Thursday",
            "updated_at": "2012-03-02T11:08:36Z",
            "id": 3126,
            "day": "Donderdag",
            "starttime": "2000-01-01T10:00:00Z",
            "starttime_timestamp": 946720800
        },
        {
            "endtime_timestamp": 946749600,
            "created_at": "2012-01-03T13:31:53Z",
            "endtime": "2000-01-01T18:00:00Z",
            "closed": false,
            "day_en": "Friday",
            "updated_at": "2012-03-02T11:08:36Z",
            "id": 3127,
            "day": "Vrijdag",
            "starttime": "2000-01-01T10:00:00Z",
            "starttime_timestamp": 946720800
        },
        {
            "endtime_timestamp": 946749600,
            "created_at": "2012-01-03T13:31:53Z",
            "endtime": "2000-01-01T18:00:00Z",
            "closed": false,
            "day_en": "Saturday",
            "updated_at": "2012-03-02T11:08:36Z",
            "id": 3128,
            "day": "Zaterdag",
            "starttime": "2000-01-01T10:00:00Z",
            "starttime_timestamp": 946720800
        },
        {
            "endtime_timestamp": 946749600,
            "created_at": "2012-01-03T13:31:53Z",
            "endtime": "2000-01-01T18:00:00Z",
            "closed": false,
            "day_en": "Sunday",
            "updated_at": "2012-03-02T11:08:36Z",
            "id": 3129,
            "day": "Zondag",
            "starttime": "2000-01-01T10:00:00Z",
            "starttime_timestamp": 946720800
        }

openhours が有効な「季節」 (この場合は 1 年) と、日を表示する 7 つのオブジェクトがあることがはっきりとわかります。Starttime と endtime は必要な時間です。これは標準の日付です。年月日は関係ありません。

しかし、コードを実行すると、出力は次のようになります。

07-25 10:46:17.720: I/openingstijden(31338): Maandag: 21:50 - 21:50
07-25 10:46:17.720: I/openingstijden(31338): Dinsdag: 21:50 - 21:50
07-25 10:46:17.720: I/openingstijden(31338): Woensdag: 21:50 - 21:50
07-25 10:46:17.720: I/openingstijden(31338): Donderdag: 21:50 - 21:50
07-25 10:46:17.720: I/openingstijden(31338): Vrijdag: 21:50 - 21:50
07-25 10:46:17.720: I/openingstijden(31338): Zaterdag: 21:50 - 21:50
07-25 10:46:17.720: I/openingstijden(31338): Zondag: 21:50 - 21:50

(ここでは、まだ日付を部分文字列にしていません。オランダ語で申し訳ありませんが、月曜日から日曜日を意味するので問題ありません)
しかし、時間はすべて間違っています。いきなり21時50分がどうやって出てくるのかわからない。誰でもアイデアはありますか?その下に私のコードがあります:

public String[] GetOpeningHours(JVenue venue, String language){
        Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
        String[] oh= new String[8];
        Date start,end;


        JVenueSeasons seizoen = venue.venue_seasons.get(0); // get first, second ALWAYS enabled:false

        if(language.equals("nld")){
        oh[0]=seizoen.exception_nl; //exception eerste string uit array
        for (int i=0; i<7;i++){
            if(seizoen.season_openings.get(i).closed==true){
                oh[(i+1)]= "gesloten";
            }else{
            start=seizoen.season_openings.get(i).starttime;
            end=seizoen.season_openings.get(i).endtime;
            calendar.setTime(start);
            String starttijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE));
            calendar.setTime(end);
            String eindtijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE));

            oh[(i+1)]= seizoen.season_openings.get(i).day.substring(0, 2)+ ": " + starttijd +" - "+eindtijd;
            }
        }
        }else{
            oh[0]=seizoen.exception_en; //exception eerste string uit array
            for (int i=0; i<7;i++){
                if(seizoen.season_openings.get(i).closed==true){
                    oh[(i+1)]= "closed";
                }else{
                start=seizoen.season_openings.get(i).starttime;
                end=seizoen.season_openings.get(i).endtime;
                calendar.setTime(start);
                String starttijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE));
                calendar.setTime(end);
                String eindtijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE));
                oh[(i+1)]= seizoen.season_openings.get(i).day_en.substring(0, 2)+ ": " + starttijd +" - "+eindtijd;
                }
            }   
        }
        return oh;
        }

}
4

2 に答える 2

0

あなたのコードには次のものがあります:

calendar.setTime(start);
String starttijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE));
calendar.setTime(end);
String eindtijd= String.valueOf(calendar.get(Calendar.HOUR_OF_DAY))+":"+String.valueOf(calendar.get(Calendar.MINUTE));

よくわかりませんが、calendar.setTime()関数が期待どおりに機能していないようです。カレンダーには、開始変数と終了変数の両方に設定した現在の日付と時刻の値が残っています。

SimpleDateFormatを使用してみてください 。次のようなものです。

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
String starttijd = timeFormat.format(start);
String eindtijd = timeFormat.format(end);
于 2012-07-25T12:27:57.417 に答える
0

どちらかわかりませんが、コードは「2000-01-01T10:00:00Z」などの ISO 8601 文字列を取得し、それを java.util.Date に割り当てているようです。Date オブジェクトをインスタンス化している場所がわかりません。Adinia のように、実行時 (実行時) に現在の日付/時間でインスタンス化された Date を何らかの方法で取得したと思います。

String.valueOfまた、これらの呼び出しを使用する必要はありません。Adinia の回答に記載されているように、そのためにフォーマッターを使用します。

java.util.Date および .Calendar クラスは可能な限り避けることをお勧めします。彼らは厄介なことで有名です。代わりに、Joda-Time または Java 8 の新しい java.time.* クラスを使用してください。

Joda-Timeでは、そのISO 8601文字列を DateTime のコンストラクターに渡すだけです。

Joda-Time 2.3 を使用したサンプル コードを次に示します。アムステルダムのタイム ゾーンを使用して、データの日時の値を調整しました。UTC/GMT を表示する場合は、代わりに定数 "DateTimeZone.UTC" をコンストラクターに渡します。

String endtime = "2000-01-01T18:00:00Z";
String starttime = "2000-01-01T10:00:00Z";

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Amsterdam" ); // Or: DateTimeZone.UTC

DateTime end = new DateTime( endtime, timeZone );
DateTime start = new DateTime( starttime, timeZone );

DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm");

System.out.println( "Hours: " + formatter.print(  start ) + " - " + formatter.print( end ) );

実行すると…</p>

Hours: 11:00 - 19:00

あなたのデータは、あなたの本当の意図が日付なしで時刻を記録することであることを示唆しています。もしそうなら、そうしてください。完全な日時とタイム ゾーン ("Z") を格納することは、日時を意味し、将来混乱を招く可能性があります。Joda-Time と Java 8 は両方とも、その目的のために「LocalTime」オブジェクトを提供します。

于 2014-01-24T07:43:45.710 に答える