0

私は文字列形式の日付を持っていますが、これは時々 this:05-11-2009 16:59:20のようになり、時には this: のよう2013-12-05T22:00:00:00Zになり、他の時間は this: のようになります2013-12-05T22:00:00:00.000Z

これらの日付から月日と年を抽出する関数を作成しましたが、入力形式を渡すすべてに対して機能する関数が必要です。何かのようなもの:

function DateParts(datetime, format) {
    var matches = datetime.splitByFormat(format);

    this.getYear = function () {
       return matches[3];
    };
    this.getMonth = function () {
        return (matches[2] - 1) +"" ;
    };
    this.getDay = function () {
        return matches[1];
    };
    this.getHours = function () {
        return matches[4];
    };
    this.getMinutes = function () {
    return matches[5];
    };
    this.getSeconds = function () {
        return matches[6];
    };
};

フォーマットはどこに似ている"yyyy-mm-dd hh:MM:ss"か、"dd-mm-yyyyThh:MM:ss.dddZ"または何でもあります。

私の頭をサブストリング化することなく、splitByFormat関数を作成する良い方法はありますか?

4

3 に答える 3

2

それらすべてを見つけるための1つの正規表現:

(((?<month>\d{2})-(?<day>\d{2})-(?<year>\d{4})\s(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}))|((?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}):(?<millisecond>\d{2})Z)|(?<year>(\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2}):(?<millisecond>\d{2})\.(?<centisecond>\d{3})Z))

この正規表現文字列を使用すると、さまざまなグループをキャプチャできます。

  • 時間
  • 2番目
  • ミリ秒
  • センチ秒
于 2013-07-11T13:42:07.267 に答える
1

この単純なクラスFormatAnalyzerは始まりかもしれません。できます。

FormatAnalyzer f = new FormatAnalyzer("yyyy-mm-dd hh:MM:ss");
f.getYear("2013-07-11 15:39:00");
f.getMonth("2013-07-11 15:39:00");

どこ

public class FormatAnalyzer {

    private String format;
    private int yearBegin;
    private int yearEnd;
    private int monthBegin;
    private int monthEnd;
    // ...

    public FormatAnalyzer(String format) {
        this.format = format;
        analyzeFormat();
    }

    public String getYear(String date) {
        return date.substring(yearBegin, yearEnd);
    }

    public String getMonth(String date) {
        return date.substring(monthBegin, monthEnd);
    }

    private void analyzeFormat() {
        yearBegin = yearEnd = format.indexOf("y");
        while (format.indexOf("y", ++yearEnd) != -1) {
        }
        monthBegin = monthEnd = format.indexOf("m");
        while (format.indexOf("m", ++monthEnd) != -1) {
        }
        // and so on for year, day, ...
    }
}
于 2013-07-11T13:47:17.213 に答える
1

これはどうですか?何か良い人はいますか?

function DateParts(datetime, format) {

    this.getYear = function () {
        if (format) {
            ind = format.indexOf("yyyy");
            return datetime.substring(ind, ind + 4);
        }
         return "";

    };
    this.getMonth = function () {
        if (format) {
            ind = format.indexOf("mm");
            return datetime.substring(ind, ind + 2);
        }
        return "";            
    };
    this.getDay = function () {
        if (format) {
            ind = format.indexOf("gg");
            return datetime.substring(ind, ind + 2);
       }
       return "";
    };
};
于 2013-07-11T13:39:18.540 に答える