LibreOffice Module tools (master) 1
time.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19#ifndef INCLUDED_TOOLS_TIME_HXX
20#define INCLUDED_TOOLS_TIME_HXX
21
22#include <tools/toolsdllapi.h>
23#include <com/sun/star/util/Time.hpp>
24
25namespace com::sun::star::util { struct DateTime; }
26
33namespace tools {
34
36{
37private:
38 sal_Int64 nTime;
39 void init( sal_uInt32 nHour, sal_uInt32 nMin,
40 sal_uInt32 nSec, sal_uInt64 nNanoSec);
41
42public:
44 {
45 SYSTEM
46 };
47
48 // temporary until all uses are inspected and resolved
50 {
51 EMPTY
52 };
53 static const sal_Int64 hourPerDay = 24;
54 static const sal_Int64 minutePerHour = 60;
55 static const sal_Int64 secondPerMinute = 60;
56 static const sal_Int64 nanoSecPerSec = 1000000000;
57 static const sal_Int64 nanoSecPerMinute = nanoSecPerSec * secondPerMinute;
58 static const sal_Int64 nanoSecPerHour = nanoSecPerSec * secondPerMinute * minutePerHour;
59 static const sal_Int64 nanoSecPerDay = nanoSecPerSec * secondPerMinute * minutePerHour * hourPerDay;
60 static const sal_Int64 secondPerHour = secondPerMinute * minutePerHour;
61 static const sal_Int64 secondPerDay = secondPerMinute * minutePerHour * hourPerDay;
62 static const sal_Int64 minutePerDay = minutePerHour * hourPerDay;
63 static const sal_Int64 nanoPerMicro = 1000;
64 static const sal_Int64 nanoPerMilli = 1000000;
65 static const sal_Int64 nanoPerCenti = 10000000;
66
67 explicit Time( TimeInitEmpty )
68 { nTime = 0; }
69 explicit Time( TimeInitSystem );
70 explicit Time( sal_Int64 _nTime ) { Time::nTime = _nTime; }
71 Time( const tools::Time& rTime );
72 Time( const css::util::Time& rTime );
73 explicit Time( const css::util::DateTime& rDateTime );
74 Time( sal_uInt32 nHour, sal_uInt32 nMin,
75 sal_uInt32 nSec = 0, sal_uInt64 nNanoSec = 0 );
76
77 void SetTime( sal_Int64 nNewTime ) { nTime = nNewTime; }
78 sal_Int64 GetTime() const { return nTime; }
79 css::util::Time GetUNOTime() const { return css::util::Time(GetNanoSec(),GetSec(),GetMin(),GetHour(),false); }
80
81 void SetHour( sal_uInt16 nNewHour );
82 void SetMin( sal_uInt16 nNewMin );
83 void SetSec( sal_uInt16 nNewSec );
84 void SetNanoSec( sal_uInt32 nNewNanoSec );
85 sal_uInt16 GetHour() const
86 { sal_uInt64 nTempTime = (nTime >= 0) ? nTime : -nTime;
87 return static_cast<sal_uInt16>(nTempTime / SAL_CONST_UINT64(10000000000000)); }
88 sal_uInt16 GetMin() const
89 { sal_uInt64 nTempTime = (nTime >= 0) ? nTime : -nTime;
90 return static_cast<sal_uInt16>((nTempTime / SAL_CONST_UINT64(100000000000)) % 100); }
91 sal_uInt16 GetSec() const
92 { sal_uInt64 nTempTime = (nTime >= 0) ? nTime : -nTime;
93 return static_cast<sal_uInt16>((nTempTime / SAL_CONST_UINT64(1000000000)) % 100); }
94 sal_uInt32 GetNanoSec() const
95 { sal_uInt64 nTempTime = (nTime >= 0) ? nTime : -nTime;
96 return static_cast<sal_uInt32>( nTempTime % SAL_CONST_UINT64(1000000000)); }
97
98 // TODO: consider removing GetMSFromTime and MakeTimeFromMS?
99 sal_Int32 GetMSFromTime() const;
100 void MakeTimeFromMS( sal_Int32 nMS );
101 sal_Int64 GetNSFromTime() const;
102 void MakeTimeFromNS( sal_Int64 nNS );
103
105 double GetTimeInDays() const;
106
122 static void GetClock( double fTimeInDays,
123 sal_uInt16& nHour, sal_uInt16& nMinute, sal_uInt16& nSecond,
124 double& fFractionOfSecond, int nFractionDecimals );
125
126 bool IsEqualIgnoreNanoSec( const tools::Time& rTime ) const;
127
128 bool operator ==( const tools::Time& rTime ) const
129 { return (nTime == rTime.nTime); }
130 bool operator !=( const tools::Time& rTime ) const
131 { return (nTime != rTime.nTime); }
132 bool operator >( const tools::Time& rTime ) const
133 { return (nTime > rTime.nTime); }
134 bool operator <( const tools::Time& rTime ) const
135 { return (nTime < rTime.nTime); }
136 bool operator >=( const tools::Time& rTime ) const
137 { return (nTime >= rTime.nTime); }
138 bool operator <=( const tools::Time& rTime ) const
139 { return (nTime <= rTime.nTime); }
140
141 static Time GetUTCOffset();
142
148 static sal_uInt64 GetSystemTicks();
149
162 static sal_uInt64 GetMonotonicTicks();
163
164 tools::Time& operator =( const tools::Time& rTime );
166 { return Time( -nTime ); }
167 tools::Time& operator +=( const tools::Time& rTime );
168 tools::Time& operator -=( const tools::Time& rTime );
169 TOOLS_DLLPUBLIC friend Time operator +( const tools::Time& rTime1, const tools::Time& rTime2 );
170 TOOLS_DLLPUBLIC friend Time operator -( const tools::Time& rTime1, const tools::Time& rTime2 );
171};
172
173} /* namespace tools */
174
175#endif
176
177/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool operator==(const BigInt &rVal1, const BigInt &rVal2)
Definition: bigint.cxx:806
bool operator<(const BigInt &rVal1, const BigInt &rVal2)
Definition: bigint.cxx:818
FILE * init(int, char **)
sal_uInt16 GetSec() const
Definition: time.hxx:91
sal_Int64 GetTime() const
Definition: time.hxx:78
sal_uInt16 GetMin() const
Definition: time.hxx:88
Time(TimeInitEmpty)
Definition: time.hxx:67
sal_uInt16 GetHour() const
Definition: time.hxx:85
sal_uInt32 GetNanoSec() const
Definition: time.hxx:94
Time(sal_Int64 _nTime)
Definition: time.hxx:70
TimeInitSystem
Definition: time.hxx:44
void SetTime(sal_Int64 nNewTime)
Definition: time.hxx:77
sal_Int64 nTime
Definition: time.hxx:38
css::util::Time GetUNOTime() const
Definition: time.hxx:79
TimeInitEmpty
Definition: time.hxx:50
bool operator>(const Fraction &rVal1, const Fraction &rVal2)
Definition: fract.cxx:377
bool operator>=(const Fraction &rVal1, const Fraction &rVal2)
Definition: fract.cxx:350
bool operator!=(const Fraction &rVal1, const Fraction &rVal2)
Definition: fract.cxx:340
bool operator<=(const Fraction &rVal1, const Fraction &rVal2)
Definition: fract.cxx:345
constexpr OUStringLiteral EMPTY
Note: this class is a true marvel of engineering: because the author could not decide whether it's be...
Time operator-(const tools::Time &rTime1, const tools::Time &rTime2)
Definition: ttime.cxx:383
Time operator+(const tools::Time &rTime1, const tools::Time &rTime2)
Definition: ttime.cxx:377
tools::Rectangle & operator+=(tools::Rectangle &rRect, const SvBorder &rBorder)
Definition: svborder.cxx:22
#define TOOLS_DLLPUBLIC
Definition: toolsdllapi.h:28
#define SAL_WARN_UNUSED