예제 #1
0
파일: tst_qdate.cpp 프로젝트: maxxant/qt
void tst_QDate::roundtrip() const
{
    // Test round trip, this exercises setDate(), isValid(), isLeapYear(),
    // year(), month(), day(), julianDayFromDate(), and getDateFromJulianDay()
    // to ensure they are internally consistent (but doesn't guarantee correct)

    // Test Julian round trip in both BC and AD
    QDate testDate;
    QDate loopDate = QDate::fromJulianDay(1684899); //  1 Jan 100 BC
    while ( loopDate.toJulianDay() <= 1757948 ) {   // 31 Dec 100 AD
        testDate.setDate( loopDate.year(), loopDate.month(), loopDate.day() );
        QCOMPARE( loopDate.toJulianDay(), testDate.toJulianDay() );
        loopDate = loopDate.addDays(1);
    }

    // Test Julian and Gregorian round trip during changeover period
    loopDate = QDate::fromJulianDay(2298153);     //  1 Jan 1580 AD
    while ( loopDate.toJulianDay() <= 2300334 ) { // 31 Dec 1585 AD
        testDate.setDate( loopDate.year(), loopDate.month(), loopDate.day() );
        QCOMPARE( loopDate.toJulianDay(), testDate.toJulianDay() );
        loopDate = loopDate.addDays(1);
    }

    // Test Gregorian round trip during current useful period
    loopDate = QDate::fromJulianDay(2378497);     //  1 Jan 1900 AD
    while ( loopDate.toJulianDay() <= 2488433 ) { // 31 Dec 2100 AD
        testDate.setDate( loopDate.year(), loopDate.month(), loopDate.day() );
        QCOMPARE( loopDate.toJulianDay(), testDate.toJulianDay() );
        loopDate = loopDate.addDays(1);
    }
}
예제 #2
0
QDate GeldRechen::maxDate(QDate a,QDate b) {
    //check for null date

    if (a.toJulianDay()> b.toJulianDay()) {

        return a;
    }
    else {

        return b;
    }


}
예제 #3
0
int KCalendarSystem::dayOfYear( const QDate &date ) const
{
    //Take the jd of the given date, and subtract the jd of the first day of that year

    if ( isValid( date ) ) {
        QDate firstDayOfYear;

        if ( setDate( firstDayOfYear, year( date ), 1, 1 ) ) {
            return ( date.toJulianDay() - firstDayOfYear.toJulianDay() + 1 );
        }
    }

    return -1;
}
예제 #4
0
void KStarsDateTime::setDate( const QDate &_d ) {
    //Save the JD fraction
    long double jdFrac = djd() - (long double)( date().toJulianDay() );

    //set the integer portion of the JD and add back the JD fraction:
    setDJD( (long double)_d.toJulianDay() + jdFrac );
}
예제 #5
0
QList<int> tradeDateCalendar::computeFrequencyTradeMonthly(int date_, int minimumDate_, int maximumDate_)
{
    QList<int> tradeDates;

    QDate monthDayCounter = QDate::fromJulianDay(minimumDate_);
    int dayOfMonth = QDate::fromJulianDay(date_).day();

    forever
    {
        QDate monthDayComputation = monthDayCounter;
        if (monthDayComputation.day() > dayOfMonth)
            monthDayComputation = monthDayComputation.addMonths(1);

        if (dayOfMonth > monthDayComputation.daysInMonth())
        {
            monthDayComputation = monthDayComputation.addMonths(1);
            monthDayComputation = QDate(monthDayComputation.year(), monthDayComputation.month(), 1);
        }
        else
            monthDayComputation = QDate(monthDayComputation.year(), monthDayComputation.month(), dayOfMonth);

        date_ = checkTradeDate(monthDayComputation.toJulianDay(), direction_ascending);
        if (date_ > maximumDate_)
            break;

        tradeDates.append(date_);
        monthDayCounter = monthDayCounter.addMonths(1);
    }

    return tradeDates;
}
예제 #6
0
QDate KCalendarSystem::addYears( const QDate &date, int numYears ) const
{
    if ( isValid( date ) ) {

        int originalYear, originalMonth, originalDay;
        int newYear, newMonth, newDay;
        QDate firstOfNewMonth, newDate;

        julianDayToDate( date.toJulianDay(), originalYear, originalMonth, originalDay );

        newYear = originalYear + numYears;
        newMonth = originalMonth;

        //Adjust day number if new month has fewer days than old month
        if ( setDate( firstOfNewMonth, newYear, newMonth, 1 ) ) {
            int daysInNewMonth = daysInMonth( firstOfNewMonth );
            newDay = ( daysInNewMonth < originalDay ) ? daysInNewMonth : originalDay;

            if ( setDate( newDate, newYear, newMonth, newDay ) ) {
                return newDate;
            }
        }

    }

    //Is QDate's way of saying is invalid
    return QDate::fromJulianDay( 0 );
}
예제 #7
0
파일: dbmanager.cpp 프로젝트: sgranfius/sns
bool DbManager::addLicenseToPerson(const int id_person, const int id_license, const QDate& date_of_issue) const
{
    if(id_person > 0 && id_license > 0) {
        QSqlQuery query_select;
        QString query_select_string = "SELECT id FROM people_license WHERE id_person = :id_person AND id_license = :id_license";
        query_select.prepare(query_select_string);
        query_select.bindValue(":id_person", id_person);
        query_select.bindValue(":id_license", id_license);
        if(query_select.exec()) {
            if(query_select.isActive()) {
                if(!query_select.first()) {
                    QSqlQuery query;
                    QString query_string =     "INSERT INTO people_license (id_person, id_license, date_of_issue, is_valid, last_notification)"
                                               "VALUES (:id_person, :id_license, :date, 'true', '-1')";
                    query.prepare(query_string);
                    query.bindValue(":id_person", id_person);
                    query.bindValue(":id_license", id_license);
                    if(date_of_issue != QDate(0, 0, 0)) {
                        query.bindValue(":date", date_of_issue.toJulianDay());
                    } else {
                        query.bindValue(":date", 0);
                    }
                    if(query.exec()) {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}
예제 #8
0
파일: DateUtils.hpp 프로젝트: dmlys/QtTools
	inline boost::chrono::system_clock::time_point ToBoostChrono(QDate date)
	{
		/// https://en.wikipedia.org/wiki/Julian_day
		/// (JD − 2440587.5) × 86400
		auto unix_time = (date.toJulianDay() - QDATE_JULIAN_DAY_FOR_UNIX_EPOCH) * 24 * 60 * 60;
		return boost::chrono::system_clock::from_time_t(unix_time);
	}
예제 #9
0
QList<int> tradeDateCalendar::computeFrequencyTradeYearly(int date_, int minimumDate_, int maximumDate_)
{
    QList<int> tradeDates;

    QDate yearDayCounter = QDate::fromJulianDay(minimumDate_);
    int dayOfYear = QDate::fromJulianDay(date_).dayOfYear();

    forever
    {
        QDate yearDayComputation = yearDayCounter;
        int leapDayofYear = dayOfYear + (dayOfYear > 59 /* Feb 28th */ && QDate::isLeapYear(yearDayComputation.year()) ? 1 : 0);

        if (yearDayComputation.dayOfYear() > leapDayofYear)
        {
            yearDayComputation = yearDayComputation.addYears(1);
            leapDayofYear = dayOfYear + (dayOfYear > 59 /* Feb 28th */ && QDate::isLeapYear(yearDayComputation.year()) ? 1 : 0);
        }

        date_ = checkTradeDate(yearDayComputation.toJulianDay(), direction_ascending);
        if (date_ > maximumDate_)
            break;

        tradeDates.append(date_);
        yearDayCounter = yearDayCounter.addYears(1);
    }

    return tradeDates;
}
예제 #10
0
KStarsDateTime::KStarsDateTime( const QDate &_d, const QTime &_t ) :
    //QDateTime( _d, _t, QDateTime::Spec::UTC() )
    QDateTime( _d, _t, Qt::UTC )
{
    //don't call setDJD() because we don't need to compute the time; just set DJD directly
    long double jdFrac = ( _t.hour()-12 + ( _t.minute() + ( _t.second() + _t.msec()/1000.)/60.)/60.)/24.;
    DJD = (long double)( _d.toJulianDay() ) + jdFrac;
}
예제 #11
0
파일: ddatetable.cpp 프로젝트: KDE/digikam
void DDateTable::unsetCustomDatePainting(const QDate& date)
{
    d->customPaintingModes.remove(date.toJulianDay());

    if (d->customPaintingModes.isEmpty())
    {
        d->useCustomColors = false;
    }
    update();
}
예제 #12
0
QDate GeldRechen::minDate(QDate a,QDate b) {


    //qDebug () << "date compar " << a.toString() << " with " << b.toString();
    if ((a.month()==0) && (a.year()==0) && (a.day()==0)) {
        return b;
    }
    else {



        if (a.toJulianDay()> b.toJulianDay()) {
            return b;
        }
        else {
            return a;
        }
    }
}
예제 #13
0
// Fake version using QDate, each Calendar System MUST implement the correct version for themselves
// The implementation MUST NOT do validity checking on date ranges, all calls to this function MUST
// instead be wrapped in validity checks, as sometimes we want this to work outside the public valid
// range, i.e. to allow us to internally set dates of 1/1/10000 which are not publically valid but
// are required for internal maths
bool KCalendarSystem::dateToJulianDay( int year, int month, int day, int &jd ) const
{
    QDate date;

    if ( date.setDate( year, month, day ) ) {
        jd = date.toJulianDay();
        return true;
    }

    return false;
}
예제 #14
0
int KCalendarSystem::year( const QDate &date ) const
{
    if ( isValid( date ) ) {
        int year, month, day;

        julianDayToDate( date.toJulianDay(), year, month, day );

        return year;
    }

    return 0;  // How do you denote invalid year when we support -ve years?
}
예제 #15
0
int KCalendarSystem::day( const QDate &date ) const
{
    if ( isValid( date ) ) {
        int year, month, day;

        julianDayToDate( date.toJulianDay(), year, month, day );

        return day;
    }

    return 0;
}
예제 #16
0
int KCalendarSystem::dayOfWeek( const QDate &date ) const
{
    // Makes assumption that Julian Day 0 was day 1 of week
    // This is true for Julian/Gregorian calendar with jd 0 being Monday
    // We add 1 for ISO compliant numbering for 7 day week
    // Assumes we've never skipped weekdays
    if ( isValid( date ) ) {
        return ( ( date.toJulianDay() % daysInWeek( date ) ) + 1 );
    }

    return -1;
}
예제 #17
0
// Function: ISOWEEKNUM
//
//              method  startday name of day
// default:     1       1        sunday
//              2       0        monday
//
Value func_isoWeekNum(valVector args, ValueCalc *calc, FuncExtra *)
{
    QDate date = calc->conv()->asDate(args[0]).asDate(calc->settings());
    if (!date.isValid())
        return Value::errorVALUE();

    int method = 2; // default method = 2
    if (args.count() > 1)
        method = calc->conv()->asInteger(args[1]).asInteger();

    if (method < 1 || method > 2)
        return Value::errorVALUE();

    int startday = 1;
    if (method != 1)
        startday = 0;

    int weeknum;
    int day;                   // current date
    int day4;                  // 4th of jan.
    int day0;                  // offset to 4th of jan.

    // date to find
    day = date.toJulianDay();

    // 4th of jan. of current year
    day4 = QDate(date.year(), 1, 4).toJulianDay();

    // difference in days to the 4th of jan including correction of startday
    day0 = QDate::fromJulianDay(day4 - 1 + startday).dayOfWeek();

    // do we need to count from last year?
    if (day < day4 - day0) { // recalculate day4 and day0
        day4 = QDate(date.year() - 1, 1, 4).toJulianDay(); // 4th of jan. last year
        day0 = QDate::fromJulianDay(day4 - 1 + startday).dayOfWeek();
    }

    // calc weeeknum
    weeknum = (day - (day4 - day0)) / 7 + 1;

    // if weeknum is greater 51, we have to do some extra checks
    if (weeknum >= 52) {
        day4 = QDate(date.year() + 1, 1, 4).toJulianDay(); // 4th of jan. next year
        day0 = QDate::fromJulianDay(day4 - 1 + startday).dayOfWeek();

        if (day >= day4 - day0) { // recalculate weeknum
            weeknum = (day - (day4 - day0)) / 7 + 1;
        }
    }

    return Value(weeknum);
}
예제 #18
0
QDate KCalendarSystem::addDays( const QDate &date, int numDays ) const
{
    // QDate only holds a uint and has no boundary checking in addDays(), so we need to check
    if ( isValid( date ) && (long) date.toJulianDay() + (long) numDays > 0 ) {
        // QDate adds straight to jd
        QDate temp = date.addDays( numDays );
        if ( isValid( temp ) ) {
            return temp;
        }
    }

    //Is QDate's way of saying is invalid
    return QDate::fromJulianDay( 0 );
}
예제 #19
0
bool frmPriceImport::validateRow(int row_, const QStringList line_, const QHash<int, int> &columns_, const QString &dateFormat_)
{
    ++row_; // for display
    if (line_.count() != columns_.count())
    {
        QMessageBox::critical(this, "Import", "Incorrect number of columns on row " + QString::number(row_) + ".");
        return false;
    }

    if (line_.at(columns_.value(column_Symbol)).isEmpty())
    {
        QMessageBox::critical(this, "Import", "No symbol specified on row " + QString::number(row_) + ".");
        return false;
    }

    QDate date = QDate::fromString(line_.at(columns_.value(column_Date)), dateFormat_);
    if (!date.isValid())
    {
        QMessageBox::critical(this, "Import", "Incorrect date format on row " + QString::number(row_) +
            ". Date is \"" + line_.at(columns_.value(column_Date)) + "\".");
        return false;
    }
    if (!ui->columnOrderDateIgnore->isChecked() && !tradeDateCalendar::isTradeDate(date.toJulianDay()))
    {
        QMessageBox::critical(this, "Import", "Row " + QString::number(row_) +
            " is not a valid US trade date. Date is \"" + line_.at(columns_.value(column_Date)) + "\".");
        return false;
    }

    QString type = line_.at(columns_.value(column_Type)).toUpper();
    if (type != "PRICE" && type != "DIVIDEND" && type != "SPLIT")
    {
        QMessageBox::critical(this, "Import", "Incorrect price type on row " + QString::number(row_) +
            ". Price type is \"" + line_.at(columns_.value(column_Type)) + "\", but valid choices" +
            " are only Price, Dividend, or Split.");
        return false;
    }

    bool ok;
    line_.at(columns_.value(column_Value)).toDouble(&ok);
    if (!ok)
    {
        QMessageBox::critical(this, "Import", "Incorrect value on row " + QString::number(row_) +
            ". Value is \"" + line_.at(columns_.value(column_Value)) + "\", but could not be" +
            " converted to a number.");
        return false;
    }

    return true;
}
예제 #20
0
파일: ddatetable.cpp 프로젝트: KDE/digikam
void DDateTable::setCustomDatePainting(const QDate& date, const QColor& fgColor,
                                       BackgroundMode bgMode, const QColor& bgColor)
{
    if (!fgColor.isValid())
    {
        unsetCustomDatePainting(date);
        return;
    }

    Private::DatePaintingMode mode;
    mode.bgMode          = bgMode;
    mode.fgColor         = fgColor;
    mode.bgColor         = bgColor;

    d->customPaintingModes.insert(date.toJulianDay(), mode);
    d->useCustomColors = true;
    update();
}
예제 #21
0
QList<QObject*> DatabaseManager::dateRents(const int year, const int month, const int day)
{
    QList<QObject*> result;
    QDate date;
    date.setDate(year,month,day);

    QSqlQuery query(QString("select * from rent where date = %1").arg(date.toJulianDay()));
    while (query.next()) {
        Rent* item = new Rent();
        item->m_id = query.value(0).toInt();
        item->m_rentBlockIndex = query.value(1).toInt();
        item->m_itemId = query.value(2).toInt();
        item->m_renterId = query.value(3).toInt();
        item->m_date = query.value(4).toInt();
        result.append(item);
    }
    return result;
}
예제 #22
0
파일: tst_qdate.cpp 프로젝트: maxxant/qt
void tst_QDate::julianDay()
{
    QFETCH(int, year);
    QFETCH(int, month);
    QFETCH(int, day);
    QFETCH(uint, jd);

    {
        QDate d;
        d.setDate(year, month, day);
        QCOMPARE(uint(d.toJulianDay()), jd);
    }

    if (jd) {
        QDate d = QDate::fromJulianDay(jd);
        QCOMPARE(d.year(), year);
        QCOMPARE(d.month(), month);
        QCOMPARE(d.day(), day);
    }
}
예제 #23
0
void DatabaseManager::insertRent(const int year, const int month, const int day,
                                 const int rentBlock, const int rentItemId, const int renterId)
{
    QDate date;
    date.setDate(year,month,day);

    if (db.isOpen()) {
        Rent* rent = new Rent();
        rent->m_id = nextId();
        rent->m_rentBlockIndex = rentBlock;
        rent->m_itemId = rentItemId;
        rent->m_renterId = renterId;

        rent->m_date = date.toJulianDay();

        QSqlQuery query;
        query.exec(QString("insert into rent values(%1,%2,'%3',%4,%5)").arg(rent->m_id).arg(rent->m_rentBlockIndex).arg(
                       rent->m_itemId).arg(rent->m_renterId).arg(rent->m_date));
        delete rent;
    }
}
예제 #24
0
QDate KCalendarSystem::addMonths( const QDate &date, int numMonths ) const
{
    if ( isValid( date ) ) {

        int originalYear, originalMonth, originalDay;
        int newYear, newMonth, newDay;
        int monthsInOriginalYear, daysInNewMonth;
        QDate firstOfNewMonth, newDate;

        julianDayToDate( date.toJulianDay(), originalYear, originalMonth, originalDay );

        monthsInOriginalYear = monthsInYear( date );

        newYear = originalYear + ( ( originalMonth + numMonths ) / monthsInOriginalYear );
        newMonth = ( originalMonth + numMonths ) % monthsInOriginalYear;

        if ( newMonth == 0 ) {
            newYear = newYear - 1;
            newMonth = monthsInOriginalYear;
        }
        if ( newMonth < 0 ) {
            newYear = newYear - 1;
            newMonth = newMonth + monthsInOriginalYear;
        }

        //Adjust day number if new month has fewer days than old month
        if ( setDate( firstOfNewMonth, newYear, newMonth, 1 ) ) {
            daysInNewMonth = daysInMonth( firstOfNewMonth );
            newDay = ( daysInNewMonth < originalDay ) ? daysInNewMonth : originalDay;

            if ( setDate( newDate, newYear, newMonth, newDay ) ) {
                return newDate;
            }
        }

    }

    //Is QDate's way of saying is invalid
    return QDate::fromJulianDay( 0 );
}
예제 #25
0
int moon_phase_trig1 (int year, int month, int day)
{
  QDate d (year, month, day);

  int thisJD = d.toJulianDay();
  double degToRad = 3.14159265 / 180;
  double K0, T, T2, T3, J0, F0, M0, M1, B1;
  int oldJ = 0;

  K0 = floor ((year - 1900) * 12.3685);
  T = (year - 1899.5) / 100;
  T2 = T * T;
  T3 = T * T * T;
  J0 = 2415020 + 29*K0;
  F0 = 0.0001178 * T2 - 0.000000155 * T3 + (0.75933 + 0.53058868 * K0) - (0.000837 * T + 0.000335 * T2);
  M0 = 360 * (GetFrac (K0 * 0.08084821133)) + 359.2242 - 0.0000333  *T2 - 0.00000347 * T3;
  M1 = 360 * (GetFrac (K0 * 0.07171366128)) + 306.0253 + 0.0107306 * T2 + 0.00001236 * T3;
  B1 = 360 * (GetFrac (K0 * 0.08519585128)) + 21.2964 - (0.0016528 * T2) - (0.00000239 * T3);

  int phase = 0;
  int jday = 0;

  while (jday < thisJD)
        {
         double F = F0 + 1.530588 * phase;
         double M5 = (M0 + phase * 29.10535608) * degToRad;
         double M6 = (M1 + phase * 385.81691806) * degToRad;
         double B6 = (B1 + phase * 390.67050646) * degToRad;
         F -= 0.4068 * sin (M6) + (0.1734 - 0.000393 * T) * sin(M5);
         F += 0.0161 * sin (2 * M6) + 0.0104 * sin (2 * B6);
         F -= 0.0074 * sin (M5 - M6) - 0.0051 * sin(M5 + M6);
         F += 0.0021 * sin (2 * M5) + 0.0010 * sin(2 * B6 - M6);
         F += 0.5 / 1440;
         oldJ = jday;
         jday = J0 + 28 * phase + floor(F);
         phase++;
        }

  return (thisJD - oldJ) % 30;
}
예제 #26
0
int moon_phase_trig2 (int year, int month, int day)
{
  double n = floor (12.37 * (year - 1900 + ((1.0 * month - 0.5) / 12.0)));
  double RAD = 3.14159265 / 180.0;
  double t = n / 1236.85;
  double t2 = t * t;
  double as = 359.2242 + 29.105356 * n;
  double am = 306.0253 + 385.816918 * n + 0.010730 * t2;
  double xtra = 0.75933 + 1.53058868 * n + ((1.178e-4) - (1.55e-7) * t) * t2;
  xtra += (0.1734 - 3.93e-4 * t) * sin (RAD * as) - 0.4068 * sin (RAD * am);

  double i = (xtra > 0.0 ? floor (xtra) : ceil (xtra - 1.0));
  QDate d (year, month, day);
  int j1 = d.toJulianDay();
  int jd = (2415020 + 28 * n) + i;
  //return (j1 - jd + 30) % 30;

  int r = (j1 - jd + 30) % 30;
  if (r == 0)
     r = 30;
  
 return r;
}
예제 #27
0
bool DatabaseManager::isFreeRentDate(const int rentItemId, const int year, const int month, const int day)
{
    QDate date;
    date.setDate(year,month,day);

    QSqlQuery query(QString("select * from rent where date = %1 and itemid = %2").arg(date.toJulianDay()).arg(rentItemId));
    while (query.next()) {
        return false;
    }
    return true;
}
예제 #28
0
// Converts a date/time value into msecs
static inline qint64 timeToMSecs(const QDate &date, const QTime &time)
{
    return ((date.toJulianDay() - JULIAN_DAY_FOR_EPOCH) * MSECS_PER_DAY)
           + time.msecsSinceStartOfDay();
}
예제 #29
0
// http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
static void finishStr(QString &str, const WeekDate &week_date, const QDate &date, const QTime &time, QChar c, int length)
{
    if (length <= 0)
        return;

    switch (c.unicode())
    {
    case L'G':
    {
        bool ad = date.year() > 0;
        if (length < 4)
            str += ad ? "AD" : "BC";
        else if (length == 4)
            str += ad ? "Anno Domini" : "Before Christ";
        else
            str += ad ? "A" : "B";
        break;
    }
    case L'y':
        if (length == 2)
            appendInt(str, date.year() % 100, 2);
        else
            appendInt(str, date.year(), length);
        break;
    case L'Y':
        appendInt(str, week_date.year(), length);
        break;
    case L'u':
    {
        int year = date.year();
        if (year < 0)
            year++;
        appendInt(str, date.year(), length);
        break;
    }
    case L'q':
    case L'Q':
    {
        int q = (date.month() + 2) / 3;
        if (length < 3)
            appendInt(str, q, length);
        else if (length == 3)
        {
            str += 'Q';
            str += QString::number(q);
        }
        else
        {
            switch (q)
            {
            case 1:
                str += qApp->translate("AdiumTimeFormatter", "1st quarter");
                break;
            case 2:
                str += qApp->translate("AdiumTimeFormatter", "2nd quarter");
                break;
            case 3:
                str += qApp->translate("AdiumTimeFormatter", "3rd quarter");
                break;
            case 4:
                str += qApp->translate("AdiumTimeFormatter", "4th quarter");
                break;
            default:
                break;
            }
        }
        break;
    }
    case L'M':
    case L'L':
        if (length < 3)
            appendInt(str, date.month(), length);
        else if (length == 3)
            str += QDate::shortMonthName(date.month());
        else if (length == 4)
            str += QDate::longMonthName(date.month());
        else
            str += QDate::shortMonthName(date.month()).at(0);
        break;
    case L'w':
        TRIM_LENGTH(2);
        appendInt(str, length, week_date.week());
        break;
    case L'W':
        while (length-- > 0)
            str += QString::number((date.day() + 6) / 7);
        break;
    case L'd':
        TRIM_LENGTH(2);
        appendInt(str, date.day(), length);
        break;
    case L'D':
        TRIM_LENGTH(3);
        appendInt(str, date.dayOfYear(), length);
        break;
    case L'F':
        while (length-- > 0)
            str += QString::number(1);
        break;
    case L'g':
        appendInt(str, date.toJulianDay(), length);
        break;
    case L'c':
    case L'e':
        if (length < 3)
        {
            appendInt(str, date.dayOfWeek(), length);
            break;
        }
    case L'E':
        if (length < 4)
            str += QDate::shortDayName(date.dayOfWeek());
        else if (length == 4)
            str += QDate::longDayName(date.dayOfWeek());
        else
            str += QDate::shortDayName(date.dayOfWeek()).at(0);
        break;
    case L'a':
        str += time.hour() < 12 ? "AM" : "PM";
        break;
    case L'H':
        TRIM_LENGTH(2);
        appendInt(str, time.hour(), length);
        break;
    case L'h':
        TRIM_LENGTH(2);
        appendInt(str, time.hour() % 12, length);
        break;
    case L'K':
        TRIM_LENGTH(2);
        appendInt(str, time.hour() - 1, length);
        break;
    case L'k':
        TRIM_LENGTH(2);
        appendInt(str, time.hour() % 12 - 1, length);
        break;
    case L'm':
        TRIM_LENGTH(2);
        appendInt(str, time.minute(), length);
        break;
    case L's':
        TRIM_LENGTH(2);
        appendInt(str, time.second(), length);
        break;
    case L'S':
        str += QString::number(time.msec() / 1000.0, 'f', length).section('.', 1);
        break;
    case L'A':
        appendInt(str, QTime(0,0).msecsTo(time), length);
        break;
    case L'v':
    // I don't understand the difference
    case L'z':
        if (length < 4)
            str += SystemInfo::instance()->timezone();
        else
            // There should be localized name, but I don't know how get it
            str += SystemInfo::instance()->timezone();
        break;
    case L'Z':
    {
        if (length == 4)
            str += "GMT";
        int offset = SystemInfo::instance()->timezoneOffset();
        if (offset < 0)
            str += '+';
        else
            str += '-';
        appendInt(str, qAbs((offset/60)*100 + offset%60), 4);
        break;
    }
    default:
        while (length-- > 0)
            str += c;
        break;
    }
}
예제 #30
0
파일: DateUtils.hpp 프로젝트: dmlys/QtTools
	inline double ToJulianDay(const QDate & date)         { return date.toJulianDay(); }