なぜ当日の時間をフォーマットして昨日の時間にしたのか

1240 ワード

詳細
質問シーン:
本番環境プログラムの実行中、統計データが正しくありません.ログを見ると、データベースに固定されたDateデータが見つかり、実行時に前日のデータとしてフォーマットされました.
問題の分析:
1.問題コード

DateUtil.format(Date,"yyyy-MM-dd"); 

2.ローカルテスト
ローカルコール再テストで問題が見つかり、当日の時間にこのメソッドが呼び出されて昨日の時間になり、データ統計が正常ではありません.
3.パッケージパスが間違っていることが判明しました.この方法はエンジニアリングのツールクラスではありません.
DateUtils
符号化中にsを1つノックしないで同じ方法を呼び出したが,試験中に時間を厳格に試験しなかった.
4.問題の分析
DateUtilはorgです.apache.commons.httpclient.utilパッケージ下のツールクラス

    public static String formatDate(Date date, String pattern) {
        if (date == null) throw new IllegalArgumentException("date is null");
        if (pattern == null) throw new IllegalArgumentException("pattern is null");
        
        SimpleDateFormat formatter = new SimpleDateFormat(pattern, Locale.US);
        formatter.setTimeZone(GMT);
        return formatter.format(date);
    }

このメソッドを呼び出す実行プロセスは、次のとおりです.
テーブルからDateタイプデータを取得し、現在の時間に基づいて中国東八時区
その後、フォーマット時間、settimeZone設定タイムゾーン、8時間減算する必要があります
すなわち,実際のフォーマット後の数値は理論的に8時間の差がある.
質問のまとめ:
1.細心の注意:プロジェクトで使用するツールクラスはすべてutilsで終わる
2.チェックコード:トレースソース