Add wxDateTime::GetWeekBasedYear().
It was just added as a private function to implement %V format specifier support, just extract and document it as it could possibly be useful in its own right. See #11857. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76989 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -36,6 +36,7 @@ All:
|
|||||||
- Add wxInt64 support to wxText{Input,Output}Stream (Alexander Bezzubikov).
|
- Add wxInt64 support to wxText{Input,Output}Stream (Alexander Bezzubikov).
|
||||||
- Define wxOVERRIDE as override for supporting compilers (Thomas Goyne).
|
- Define wxOVERRIDE as override for supporting compilers (Thomas Goyne).
|
||||||
- Allow specifying custom comparator for wxSortedArrayString (Catalin Raceanu).
|
- Allow specifying custom comparator for wxSortedArrayString (Catalin Raceanu).
|
||||||
|
- Add wxDateTime::GetWeekBasedYear().
|
||||||
|
|
||||||
Unix:
|
Unix:
|
||||||
|
|
||||||
|
@@ -760,6 +760,9 @@ public:
|
|||||||
// invalid)
|
// invalid)
|
||||||
wxDateTime_t GetWeekOfYear(WeekFlags flags = Monday_First,
|
wxDateTime_t GetWeekOfYear(WeekFlags flags = Monday_First,
|
||||||
const TimeZone& tz = Local) const;
|
const TimeZone& tz = Local) const;
|
||||||
|
// get the year to which the number returned from GetWeekOfYear()
|
||||||
|
// belongs
|
||||||
|
int GetWeekBasedYear(const TimeZone& tz = Local) const;
|
||||||
// get the week number since the month start (1..5, 0 if date is
|
// get the week number since the month start (1..5, 0 if date is
|
||||||
// invalid)
|
// invalid)
|
||||||
wxDateTime_t GetWeekOfMonth(WeekFlags flags = Monday_First,
|
wxDateTime_t GetWeekOfMonth(WeekFlags flags = Monday_First,
|
||||||
|
@@ -576,6 +576,25 @@ public:
|
|||||||
*/
|
*/
|
||||||
WeekDay GetWeekDay(const TimeZone& tz = Local) const;
|
WeekDay GetWeekDay(const TimeZone& tz = Local) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the year to which the week containing this date belongs.
|
||||||
|
|
||||||
|
The value returned by this function is the same as the year, except,
|
||||||
|
possibly, for a few days at the very beginning and very end of the year
|
||||||
|
if they belong to a week which is mostly (i.e. at least 4 days) is in
|
||||||
|
another year in which case that other (previous or next) year is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
For example, January 1 in 2015 belongs to the first year of 2015, hence
|
||||||
|
GetWeekOfYear() for it returns 1 and this function returns 2015.
|
||||||
|
However January 1 in 2016 belongs to the last week of 2015 according to
|
||||||
|
ISO 8601 standard rules and so GetWeekOfYear() returns 53 and this
|
||||||
|
function returns 2015, although GetYear() returns 2016.
|
||||||
|
|
||||||
|
@since 3.1.0
|
||||||
|
*/
|
||||||
|
int GetWeekBasedYear(const TimeZone& tz) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the ordinal number of the week in the month (in 1-5 range).
|
Returns the ordinal number of the week in the month (in 1-5 range).
|
||||||
|
|
||||||
@@ -597,6 +616,8 @@ public:
|
|||||||
The function depends on the week start convention specified by the @a flags
|
The function depends on the week start convention specified by the @a flags
|
||||||
argument but its results for @c Sunday_First are not well-defined as the
|
argument but its results for @c Sunday_First are not well-defined as the
|
||||||
ISO definition quoted above applies to the weeks starting on Monday only.
|
ISO definition quoted above applies to the weeks starting on Monday only.
|
||||||
|
|
||||||
|
@see GetWeekBasedYear()
|
||||||
*/
|
*/
|
||||||
wxDateTime_t GetWeekOfYear(WeekFlags flags = Monday_First,
|
wxDateTime_t GetWeekOfYear(WeekFlags flags = Monday_First,
|
||||||
const TimeZone& tz = Local) const;
|
const TimeZone& tz = Local) const;
|
||||||
|
@@ -1946,6 +1946,28 @@ wxDateTime::GetWeekOfYear(wxDateTime::WeekFlags flags, const TimeZone& tz) const
|
|||||||
return (wxDateTime::wxDateTime_t)week;
|
return (wxDateTime::wxDateTime_t)week;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wxDateTime::GetWeekBasedYear(const TimeZone& tz) const
|
||||||
|
{
|
||||||
|
const wxDateTime::Tm tm = GetTm(tz);
|
||||||
|
|
||||||
|
int year = tm.year;
|
||||||
|
|
||||||
|
// The week-based year can only be different from the normal year for few
|
||||||
|
// days in the beginning and the end of the year.
|
||||||
|
if ( tm.yday > 361 )
|
||||||
|
{
|
||||||
|
if ( GetWeekOfYear(Monday_First, tz) == 1 )
|
||||||
|
year++;
|
||||||
|
}
|
||||||
|
else if ( tm.yday < 5 )
|
||||||
|
{
|
||||||
|
if ( GetWeekOfYear(Monday_First, tz) == 53 )
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
|
||||||
wxDateTime::wxDateTime_t wxDateTime::GetWeekOfMonth(wxDateTime::WeekFlags flags,
|
wxDateTime::wxDateTime_t wxDateTime::GetWeekOfMonth(wxDateTime::WeekFlags flags,
|
||||||
const TimeZone& tz) const
|
const TimeZone& tz) const
|
||||||
{
|
{
|
||||||
|
@@ -271,30 +271,6 @@ GetWeekDayFromName(wxString::const_iterator& p,
|
|||||||
return wd;
|
return wd;
|
||||||
}
|
}
|
||||||
|
|
||||||
// return the year of the Monday of the week containing the given date
|
|
||||||
int
|
|
||||||
GetWeekBasedYear(const wxDateTime& dt)
|
|
||||||
{
|
|
||||||
const wxDateTime::Tm tm = dt.GetTm();
|
|
||||||
|
|
||||||
int year = tm.year;
|
|
||||||
|
|
||||||
// The week-based year can only be different from the normal year for few
|
|
||||||
// days in the beginning and the end of the year.
|
|
||||||
if ( tm.yday > 361 )
|
|
||||||
{
|
|
||||||
if ( dt.GetWeekOfYear() == 1 )
|
|
||||||
year++;
|
|
||||||
}
|
|
||||||
else if ( tm.yday < 5 )
|
|
||||||
{
|
|
||||||
if ( dt.GetWeekOfYear() == 53 )
|
|
||||||
year--;
|
|
||||||
}
|
|
||||||
|
|
||||||
return year;
|
|
||||||
}
|
|
||||||
|
|
||||||
// parses string starting at given iterator using the specified format and,
|
// parses string starting at given iterator using the specified format and,
|
||||||
// optionally, a fall back format (and optionally another one... but it stops
|
// optionally, a fall back format (and optionally another one... but it stops
|
||||||
// there, really)
|
// there, really)
|
||||||
@@ -623,11 +599,11 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case wxT('g'): // 2-digit week-based year
|
case wxT('g'): // 2-digit week-based year
|
||||||
res += wxString::Format(fmt, GetWeekBasedYear(*this) % 100);
|
res += wxString::Format(fmt, GetWeekBasedYear() % 100);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case wxT('G'): // week-based year with century
|
case wxT('G'): // week-based year with century
|
||||||
res += wxString::Format(fmt, GetWeekBasedYear(*this));
|
res += wxString::Format(fmt, GetWeekBasedYear());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case wxT('H'): // hour in 24h format (00-23)
|
case wxT('H'): // hour in 24h format (00-23)
|
||||||
|
Reference in New Issue
Block a user