Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/time.h"
      6 #include "base/string_util.h"
      7 #include "base/sys_string_conversions.h"
      8 #include "base/third_party/nspr/prtime.h"
      9 
     10 #include "base/logging.h"
     11 
     12 namespace base {
     13 
     14 // TimeDelta ------------------------------------------------------------------
     15 
     16 int TimeDelta::InDays() const {
     17   return static_cast<int>(delta_ / Time::kMicrosecondsPerDay);
     18 }
     19 
     20 int TimeDelta::InHours() const {
     21   return static_cast<int>(delta_ / Time::kMicrosecondsPerHour);
     22 }
     23 
     24 int TimeDelta::InMinutes() const {
     25   return static_cast<int>(delta_ / Time::kMicrosecondsPerMinute);
     26 }
     27 
     28 double TimeDelta::InSecondsF() const {
     29   return static_cast<double>(delta_) / Time::kMicrosecondsPerSecond;
     30 }
     31 
     32 int64 TimeDelta::InSeconds() const {
     33   return delta_ / Time::kMicrosecondsPerSecond;
     34 }
     35 
     36 double TimeDelta::InMillisecondsF() const {
     37   return static_cast<double>(delta_) / Time::kMicrosecondsPerMillisecond;
     38 }
     39 
     40 int64 TimeDelta::InMilliseconds() const {
     41   return delta_ / Time::kMicrosecondsPerMillisecond;
     42 }
     43 
     44 int64 TimeDelta::InMillisecondsRoundedUp() const {
     45   return (delta_ + Time::kMicrosecondsPerMillisecond - 1) /
     46       Time::kMicrosecondsPerMillisecond;
     47 }
     48 
     49 int64 TimeDelta::InMicroseconds() const {
     50   return delta_;
     51 }
     52 
     53 // Time -----------------------------------------------------------------------
     54 
     55 // static
     56 Time Time::FromTimeT(time_t tt) {
     57   if (tt == 0)
     58     return Time();  // Preserve 0 so we can tell it doesn't exist.
     59   return Time((tt * kMicrosecondsPerSecond) + kTimeTToMicrosecondsOffset);
     60 }
     61 
     62 time_t Time::ToTimeT() const {
     63   if (us_ == 0)
     64     return 0;  // Preserve 0 so we can tell it doesn't exist.
     65   return (us_ - kTimeTToMicrosecondsOffset) / kMicrosecondsPerSecond;
     66 }
     67 
     68 // static
     69 Time Time::FromDoubleT(double dt) {
     70   return Time(static_cast<int64>((dt *
     71                                   static_cast<double>(kMicrosecondsPerSecond)) +
     72                                  kTimeTToMicrosecondsOffset));
     73 }
     74 
     75 double Time::ToDoubleT() const {
     76   if (us_ == 0)
     77     return 0;  // Preserve 0 so we can tell it doesn't exist.
     78   return (static_cast<double>(us_ - kTimeTToMicrosecondsOffset) /
     79           static_cast<double>(kMicrosecondsPerSecond));
     80 }
     81 
     82 Time Time::LocalMidnight() const {
     83   Exploded exploded;
     84   LocalExplode(&exploded);
     85   exploded.hour = 0;
     86   exploded.minute = 0;
     87   exploded.second = 0;
     88   exploded.millisecond = 0;
     89   return FromLocalExploded(exploded);
     90 }
     91 
     92 // static
     93 bool Time::FromString(const wchar_t* time_string, Time* parsed_time) {
     94   DCHECK((time_string != NULL) && (parsed_time != NULL));
     95   std::string ascii_time_string = SysWideToUTF8(time_string);
     96   if (ascii_time_string.length() == 0)
     97     return false;
     98   PRTime result_time = 0;
     99   PRStatus result = PR_ParseTimeString(ascii_time_string.c_str(), PR_FALSE,
    100                                        &result_time);
    101   if (PR_SUCCESS != result)
    102     return false;
    103   result_time += kTimeTToMicrosecondsOffset;
    104   *parsed_time = Time(result_time);
    105   return true;
    106 }
    107 
    108 }  // namespace base
    109