blob: 766f599fc05f1299e340d0ca73e62fcfa471e711 [file] [log] [blame]
[email protected]916654122011-04-26 19:07:081// Copyright (c) 2009 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commitd7cae122008-07-26 21:49:384
5#include "base/time.h"
[email protected]a3153c472009-02-04 19:38:306#include "base/sys_string_conversions.h"
initial.commitd7cae122008-07-26 21:49:387#include "base/third_party/nspr/prtime.h"
8
9#include "base/logging.h"
10
[email protected]e1acf6f2008-10-27 20:43:3311namespace base {
12
initial.commitd7cae122008-07-26 21:49:3813// TimeDelta ------------------------------------------------------------------
14
initial.commitd7cae122008-07-26 21:49:3815int TimeDelta::InDays() const {
16 return static_cast<int>(delta_ / Time::kMicrosecondsPerDay);
17}
18
19int TimeDelta::InHours() const {
20 return static_cast<int>(delta_ / Time::kMicrosecondsPerHour);
21}
22
[email protected]9f251302008-08-19 09:16:4923int TimeDelta::InMinutes() const {
24 return static_cast<int>(delta_ / Time::kMicrosecondsPerMinute);
25}
26
initial.commitd7cae122008-07-26 21:49:3827double TimeDelta::InSecondsF() const {
28 return static_cast<double>(delta_) / Time::kMicrosecondsPerSecond;
29}
30
31int64 TimeDelta::InSeconds() const {
32 return delta_ / Time::kMicrosecondsPerSecond;
33}
34
35double TimeDelta::InMillisecondsF() const {
36 return static_cast<double>(delta_) / Time::kMicrosecondsPerMillisecond;
37}
38
39int64 TimeDelta::InMilliseconds() const {
40 return delta_ / Time::kMicrosecondsPerMillisecond;
41}
42
[email protected]6b175382009-10-13 06:47:4743int64 TimeDelta::InMillisecondsRoundedUp() const {
44 return (delta_ + Time::kMicrosecondsPerMillisecond - 1) /
45 Time::kMicrosecondsPerMillisecond;
46}
47
initial.commitd7cae122008-07-26 21:49:3848int64 TimeDelta::InMicroseconds() const {
49 return delta_;
50}
51
52// Time -----------------------------------------------------------------------
53
initial.commitd7cae122008-07-26 21:49:3854// static
55Time Time::FromTimeT(time_t tt) {
56 if (tt == 0)
57 return Time(); // Preserve 0 so we can tell it doesn't exist.
[email protected]b842d4c62009-09-14 18:49:0358 return Time((tt * kMicrosecondsPerSecond) + kTimeTToMicrosecondsOffset);
initial.commitd7cae122008-07-26 21:49:3859}
60
61time_t Time::ToTimeT() const {
62 if (us_ == 0)
63 return 0; // Preserve 0 so we can tell it doesn't exist.
64 return (us_ - kTimeTToMicrosecondsOffset) / kMicrosecondsPerSecond;
65}
66
[email protected]c20210e62009-04-03 21:39:2667// static
68Time Time::FromDoubleT(double dt) {
[email protected]c925ad12010-09-09 17:17:5569 if (dt == 0)
70 return Time(); // Preserve 0 so we can tell it doesn't exist.
[email protected]b842d4c62009-09-14 18:49:0371 return Time(static_cast<int64>((dt *
72 static_cast<double>(kMicrosecondsPerSecond)) +
73 kTimeTToMicrosecondsOffset));
[email protected]c20210e62009-04-03 21:39:2674}
75
initial.commitd7cae122008-07-26 21:49:3876double Time::ToDoubleT() const {
77 if (us_ == 0)
78 return 0; // Preserve 0 so we can tell it doesn't exist.
79 return (static_cast<double>(us_ - kTimeTToMicrosecondsOffset) /
80 static_cast<double>(kMicrosecondsPerSecond));
81}
82
[email protected]c925ad12010-09-09 17:17:5583// static
84Time Time::UnixEpoch() {
85 Time time;
86 time.us_ = kTimeTToMicrosecondsOffset;
87 return time;
88}
89
initial.commitd7cae122008-07-26 21:49:3890Time Time::LocalMidnight() const {
91 Exploded exploded;
92 LocalExplode(&exploded);
93 exploded.hour = 0;
94 exploded.minute = 0;
95 exploded.second = 0;
96 exploded.millisecond = 0;
97 return FromLocalExploded(exploded);
98}
99
100// static
[email protected]916654122011-04-26 19:07:08101bool Time::FromString(const wchar_t* time_string, Time* parsed_time) {
initial.commitd7cae122008-07-26 21:49:38102 DCHECK((time_string != NULL) && (parsed_time != NULL));
[email protected]916654122011-04-26 19:07:08103 std::string ascii_time_string = SysWideToUTF8(time_string);
104 if (ascii_time_string.length() == 0)
initial.commitd7cae122008-07-26 21:49:38105 return false;
106 PRTime result_time = 0;
[email protected]916654122011-04-26 19:07:08107 PRStatus result = PR_ParseTimeString(ascii_time_string.c_str(), PR_FALSE,
initial.commitd7cae122008-07-26 21:49:38108 &result_time);
109 if (PR_SUCCESS != result)
110 return false;
111 result_time += kTimeTToMicrosecondsOffset;
112 *parsed_time = Time(result_time);
113 return true;
initial.commitd7cae122008-07-26 21:49:38114}
license.botbf09a502008-08-24 00:55:55115
[email protected]e2419082010-07-27 02:43:20116// Time::Exploded -------------------------------------------------------------
117
118inline bool is_in_range(int value, int lo, int hi) {
119 return lo <= value && value <= hi;
120}
121
122bool Time::Exploded::HasValidValues() const {
123 return is_in_range(month, 1, 12) &&
124 is_in_range(day_of_week, 0, 6) &&
125 is_in_range(day_of_month, 1, 31) &&
126 is_in_range(hour, 0, 23) &&
127 is_in_range(minute, 0, 59) &&
128 is_in_range(second, 0, 60) &&
129 is_in_range(millisecond, 0, 999);
130}
131
[email protected]e1acf6f2008-10-27 20:43:33132} // namespace base