diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index b06dc28..d680e65 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -42,7 +42,6 @@
 import static android.net.TrafficStats.UID_TETHERING;
 import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
 import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
-import static android.text.format.Time.TIMEZONE_UTC;
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static com.android.internal.util.Preconditions.checkNotNull;
 import static com.android.settings.Utils.prepareCustomPreferencesList;
@@ -86,6 +85,7 @@
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.text.format.Formatter;
+import android.text.format.Time;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.LayoutInflater;
@@ -1139,7 +1139,7 @@
 
         final long totalBytes = entry != null ? entry.rxBytes + entry.txBytes : 0;
         final String totalPhrase = Formatter.formatFileSize(context, totalBytes);
-        final String rangePhrase = formatDateRange(context, start, end, false);
+        final String rangePhrase = formatDateRange(context, start, end);
 
         mUsageSummary.setText(
                 getString(R.string.data_usage_total_during_range, totalPhrase, rangePhrase));
@@ -1264,7 +1264,7 @@
         }
 
         public CycleItem(Context context, long start, long end) {
-            this.label = formatDateRange(context, start, end, true);
+            this.label = formatDateRange(context, start, end);
             this.start = start;
             this.end = end;
         }
@@ -1293,14 +1293,13 @@
     private static final java.util.Formatter sFormatter = new java.util.Formatter(
             sBuilder, Locale.getDefault());
 
-    public static String formatDateRange(Context context, long start, long end, boolean utcTime) {
+    public static String formatDateRange(Context context, long start, long end) {
         final int flags = FORMAT_SHOW_DATE | FORMAT_ABBREV_MONTH;
-        final String timezone = utcTime ? TIMEZONE_UTC : null;
 
         synchronized (sBuilder) {
             sBuilder.setLength(0);
-            return DateUtils
-                    .formatDateRange(context, sFormatter, start, end, flags, timezone).toString();
+            return DateUtils.formatDateRange(context, sFormatter, start, end, flags, null)
+                    .toString();
         }
     }
 
@@ -1641,7 +1640,8 @@
                     new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int which) {
                             final int cycleDay = cycleDayPicker.getValue();
-                            editor.setPolicyCycleDay(template, cycleDay);
+                            final String cycleTimezone = new Time().timezone;
+                            editor.setPolicyCycleDay(template, cycleDay, cycleTimezone);
                             target.updatePolicy(true);
                         }
                     });
diff --git a/src/com/android/settings/net/NetworkPolicyEditor.java b/src/com/android/settings/net/NetworkPolicyEditor.java
index a1c7371..60db637 100644
--- a/src/com/android/settings/net/NetworkPolicyEditor.java
+++ b/src/com/android/settings/net/NetworkPolicyEditor.java
@@ -144,17 +144,20 @@
         final Time time = new Time();
         time.setToNow();
         final int cycleDay = time.monthDay;
+        final String cycleTimezone = time.timezone;
 
-        return new NetworkPolicy(template, cycleDay, WARNING_DISABLED, LIMIT_DISABLED, true);
+        return new NetworkPolicy(
+                template, cycleDay, cycleTimezone, WARNING_DISABLED, LIMIT_DISABLED, true);
     }
 
     public int getPolicyCycleDay(NetworkTemplate template) {
         return getPolicy(template).cycleDay;
     }
 
-    public void setPolicyCycleDay(NetworkTemplate template, int cycleDay) {
+    public void setPolicyCycleDay(NetworkTemplate template, int cycleDay, String cycleTimezone) {
         final NetworkPolicy policy = getOrCreatePolicy(template);
         policy.cycleDay = cycleDay;
+        policy.cycleTimezone = cycleTimezone;
         policy.clearSnooze();
         writeAsync();
     }
@@ -197,6 +200,7 @@
         return modified;
     }
 
+    @Deprecated
     public boolean isMobilePolicySplit(String subscriberId) {
         boolean has3g = false;
         boolean has4g = false;
@@ -216,6 +220,7 @@
         return has3g && has4g;
     }
 
+    @Deprecated
     public void setMobilePolicySplit(String subscriberId, boolean split) {
         if (setMobilePolicySplitInternal(subscriberId, split)) {
             writeAsync();
@@ -228,6 +233,7 @@
      *
      * @return {@code true} when any {@link NetworkPolicy} was mutated.
      */
+    @Deprecated
     private boolean setMobilePolicySplitInternal(String subscriberId, boolean split) {
         final boolean beforeSplit = isMobilePolicySplit(subscriberId);
 
@@ -248,7 +254,8 @@
                     : policy4g;
             mPolicies.remove(policy3g);
             mPolicies.remove(policy4g);
-            mPolicies.add(new NetworkPolicy(templateAll, restrictive.cycleDay,
+            mPolicies.add(new NetworkPolicy(
+                    templateAll, restrictive.cycleDay, restrictive.cycleTimezone,
                     restrictive.warningBytes, restrictive.limitBytes, restrictive.metered));
             return true;
 
@@ -256,9 +263,11 @@
             // duplicate existing policy into two rules
             final NetworkPolicy policyAll = getPolicy(templateAll);
             mPolicies.remove(policyAll);
-            mPolicies.add(new NetworkPolicy(template3g, policyAll.cycleDay, policyAll.warningBytes,
+            mPolicies.add(new NetworkPolicy(
+                    template3g, policyAll.cycleDay, policyAll.cycleTimezone, policyAll.warningBytes,
                     policyAll.limitBytes, policyAll.metered));
-            mPolicies.add(new NetworkPolicy(template4g, policyAll.cycleDay, policyAll.warningBytes,
+            mPolicies.add(new NetworkPolicy(
+                    template4g, policyAll.cycleDay, policyAll.cycleTimezone, policyAll.warningBytes,
                     policyAll.limitBytes, policyAll.metered));
             return true;
         } else {
diff --git a/src/com/android/settings/widget/ChartGridView.java b/src/com/android/settings/widget/ChartGridView.java
index b930c62..f358ada 100644
--- a/src/com/android/settings/widget/ChartGridView.java
+++ b/src/com/android/settings/widget/ChartGridView.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.widget;
 
+import static com.android.settings.DataUsageSummary.formatDateRange;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -30,7 +32,6 @@
 import android.util.TypedValue;
 import android.view.View;
 
-import com.android.settings.DataUsageSummary;
 import com.android.settings.R;
 import com.google.common.base.Preconditions;
 
@@ -82,8 +83,8 @@
 
     void setBounds(long start, long end) {
         final Context context = getContext();
-        mLayoutStart = makeLayout(DataUsageSummary.formatDateRange(context, start, start, true));
-        mLayoutEnd = makeLayout(DataUsageSummary.formatDateRange(context, end, end, true));
+        mLayoutStart = makeLayout(formatDateRange(context, start, start));
+        mLayoutEnd = makeLayout(formatDateRange(context, end, end));
         invalidate();
     }
 
