Summer'15でSystem.Date クラスの変更がありました。APIバージョン 34.0 以降では、Date.valueOf はオブジェクトを時間情報のない有効な Date に変換するようになり、Datetime データ型の変数を Date に変換するには、Datetime.date メソッドを使用するようになったとのことです。この変更についてDeveloper環境で確認してみました。
行動の開始日項目を使って確認してみます。
次のようにSystem.debug()で値を表示します。
デバッグ結果です。
sObject型とDate.valueOf()は時間部分の値も考慮された結果となります。DateTime.date()を使用することで時間部分は0:00として扱われ、-9hされない日付を取得できました。
対象日時の時間が0時ではない場合も確認してみました。
デバッグ結果です。
このようにDateTime.date()を使用すると時間部分は0:00として扱われます。