[JAVA] Behandlung ungültiger Daten (z. B. 31. Februar) in jeder Sprache

Ich habe zusammengefasst, wie mit ungültigen Daten wie dem 31. Februar in jeder Sprache umgegangen werden soll. PHP

<?php
$target_date = "2017-01-31";

for ($i=0; $i < 6; $i++) {
    echo date('Y-m-d', strtotime($target_date . '+' . $i . ' month')) . "\n";
}
?>

2017-01-31
2017-03-03
2017-03-31
2017-05-01
2017-05-31
2017-07-01

In PHP strtotime () wird es einen Monat nach dem 31.01.2017 "2017-02-31". "2017-02-31" wird als "2017-03-03" interpretiert.

JavaScript

var date = new Date(2017 ,1 - 1, 31);

for (var i=0; i < 6; i++) {
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();
    console.log(year + '-' + month + '-' + day);
    
    //Erhöhen Sie den Monat um 1
    date.setMonth(date.getMonth() + 1);
}

2017-1-31
2017-3-3
2017-4-3
2017-5-3
2017-6-3
2017-7-3

Bei der Date-Klasse von JavaScript wie bei PHP ist es einen Monat nach dem 31.01.2017 "2017-02-31". "2017-02-31" wird als "2017-03-03" interpretiert. Da setMonth () eine destruktive Methode ist, bleibt sie nach dem 03.03.2017 3 Tage lang bestehen.

Java

import java.util.Calendar;
import java.text.SimpleDateFormat;

public class Main {
    public static void main(String[] args) throws Exception {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2017, 1 - 1, 31);
        
        //Stellen Sie das Anzeigeformat ein
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    
        //Erhöhen Sie den Monat um 1
        for (int i = 0 ; i < 6 ; i++){
          System.out.println(sdf1.format(calendar.getTime()));
          calendar.add(Calendar.MONTH, 1);
        }
    }
}

2017-01-31
2017-02-28
2017-03-28
2017-04-28
2017-05-28
2017-06-28

Wenn in der Kalenderklasse von Java der erhöhte Monat nur 28 Tage hat, wird der Tag ebenfalls in 28 geändert. Selbst wenn es einen Monat bis zum 31. danach gibt, bleibt der Tag der 28 ..

Ruby

require "date"

date = Date.new(2017, 1 ,31)
for i in 0..5
    puts((date >> i).strftime("%Y-%m-%d"))
end

2017-01-31
2017-02-28
2017-03-31
2017-04-30
2017-05-31
2017-06-30

Rubys Date-Klasse gibt den letzten Tag wunderschön aus.

Recommended Posts

Behandlung ungültiger Daten (z. B. 31. Februar) in jeder Sprache
Verwendbarkeit von Datums- und Zeitklasse in jeder Sprache