なぜ当日の時間をフォーマットして昨日の時間にしたのか
1240 ワード
詳細
質問シーン:
本番環境プログラムの実行中、統計データが正しくありません.ログを見ると、データベースに固定されたDateデータが見つかり、実行時に前日のデータとしてフォーマットされました.
問題の分析:
1.問題コード
2.ローカルテスト
ローカルコール再テストで問題が見つかり、当日の時間にこのメソッドが呼び出されて昨日の時間になり、データ統計が正常ではありません.
3.パッケージパスが間違っていることが判明しました.この方法はエンジニアリングのツールクラスではありません.
DateUtils
符号化中にsを1つノックしないで同じ方法を呼び出したが,試験中に時間を厳格に試験しなかった.
4.問題の分析
DateUtilはorgです.apache.commons.httpclient.utilパッケージ下のツールクラス
このメソッドを呼び出す実行プロセスは、次のとおりです.
テーブルからDateタイプデータを取得し、現在の時間に基づいて中国東八時区
その後、フォーマット時間、settimeZone設定タイムゾーン、8時間減算する必要があります
すなわち,実際のフォーマット後の数値は理論的に8時間の差がある.
質問のまとめ:
1.細心の注意:プロジェクトで使用するツールクラスはすべてutilsで終わる
2.チェックコード:トレースソース
質問シーン:
本番環境プログラムの実行中、統計データが正しくありません.ログを見ると、データベースに固定された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.チェックコード:トレースソース