Esempio n. 1
0
QString RDWriteXmlTime(const QTime &time)
{
  int utc_off=RDTimeZoneOffset();
  QString tz_str="-";
  if(utc_off<0) {
    tz_str="+";
  }
  tz_str+=QString().
    sprintf("%02d:%02d",utc_off/3600,(utc_off-3600*(utc_off/3600))/60);

  return time.toString("hh:mm:ss")+tz_str;
}
Esempio n. 2
0
QString RDWriteRfc822DateTime(const QDateTime &dt)
{
  int utc_off=RDTimeZoneOffset();
  QString tz_str="-";
  if(utc_off<0) {
    tz_str="+";
  }
  tz_str+=QString().
    sprintf("%02d%02d",utc_off/3600,(utc_off-3600*(utc_off/3600))/60);

  return __rddatetime_dow_names[dt.date().dayOfWeek()-1]+", "+
    QString().sprintf("%d ",dt.date().day())+
    __rddatetime_month_names[dt.date().month()-1]+" "+
    QString().sprintf("%04d ",dt.date().year())+
    dt.toString("hh:mm:ss")+" "+
    tz_str;
}
Esempio n. 3
0
QTime RDUtcToLocal(const QTime &gmttime)
{
  return gmttime.addSecs(-RDTimeZoneOffset());
}
Esempio n. 4
0
QTime RDLocalToUtc(const QTime &localtime)
{
  return localtime.addSecs(RDTimeZoneOffset());
}
Esempio n. 5
0
//
// XML xs:time format
//
QTime RDParseXmlTime(const QString &str,bool *ok,int *day_offset)
{
  QTime ret;
  QStringList f0;
  QStringList f1;
  QStringList f2;
  int tz=0;
  QTime time;
  QTime tztime;

  if(ok!=NULL) {
    *ok=false;
  }
  if(day_offset!=NULL) {
    *day_offset=0;
  }
  f0=str.trimmed().split(" ");
  if(f0.size()!=1) {
    if(ok!=NULL) {
      *ok=false;
    }
    return ret;
  }

  if(f0[0].right(1).lower()=="z") {  // GMT
    tz=-RDTimeZoneOffset();
    f0[0]=f0[0].left(f0[0].length()-1);
    f2=f0[0].split(":");
  }
  else {
    f1=f0[0].split("+");
    if(f1.size()==2) {   // GMT+
      f2=f1[1].split(":");
      if(f2.size()==2) {
	tztime=QTime(f2[0].toInt(),f2[1].toInt(),0);
	if(tztime.isValid()) {
	  tz=-RDTimeZoneOffset()-QTime(0,0,0).secsTo(tztime);
	}
      }
      else {
	if(ok!=NULL) {
	  *ok=false;
	}
	return QTime();
      }
    }
    else {
      f1=f0[0].split("-");
      if(f1.size()==2) {   // GMT-
	f2=f1[1].split(":");
	if(f2.size()==2) {
	  tztime=QTime(f2[0].toInt(),f2[1].toInt(),0);
	  if(tztime.isValid()) {
	    tz=-RDTimeZoneOffset()+QTime(0,0,0).secsTo(tztime);
	  }
	}
	else {
	  if(ok!=NULL) {
	    *ok=false;
	  }
	  return QTime();
	}
      }
    }
    f2=f1[0].split(":");
  }
  if(f2.size()==3) {
    QStringList f3=f2[2].split(".");
    time=QTime(f2[0].toInt(),f2[1].toInt(),f2[2].toInt());
    if(time.isValid()) {
      ret=time.addSecs(tz);
      if(day_offset!=NULL) {
	if((tz<0)&&((3600*time.hour()+60*time.minute()+time.second())<(-tz))) {
	  *day_offset=-1;
	}
	if((tz>0)&&(86400-((3600*time.hour()+60*time.minute()+time.second()))<tz)) {
	  *day_offset=1;
	}
      }
      if(ok!=NULL) {
	*ok=true;
      }
    }
  }
  return ret;
}
Esempio n. 6
0
//
// RFC822 date/time format
//
QDateTime RDParseRfc822DateTime(const QString &str,bool *ok)
{
  QStringList f0=str.trimmed().split(" ",QString::SkipEmptyParts);

  //
  // Remove useless day-of-the-week tag
  //
  if(f0.size()==6) {
    f0.removeFirst();
  }
  if(f0.size()!=5) {
    if(ok!=NULL) {
      *ok=false;
    }
    return QDateTime();
  }

  //
  // Read Date
  //
  int month=-1;
  for(int i=0;i<7;i++) {
    if(f0.at(1).toLower()==__rddatetime_month_names[i].toLower()) {
      month=i;
    }
  }
  if(month<0) {
    if(ok!=NULL) {
      *ok=false;
    }
    return QDateTime();
  }
  if(f0.at(2).length()==2) {
    f0[2]="19"+f0.at(2);
  }
  QDate date(f0.at(2).toInt(),month+1,f0.at(0).toInt());
  if(!date.isValid()) {
    if(ok!=NULL) {
      *ok=false;
    }
    return QDateTime();
  }

  //
  // Read Time
  //
  QTime time=QTime::fromString(f0.at(3),"hh:mm:ss");
  if(!time.isValid()) {
    if(ok!=NULL) {
      *ok=false;
    }
    return QDateTime();
  }
  
  //
  // Read TZ Offset
  //
  bool ok1=false;
  bool ok2=false;
  int tz_offset=3600*f0.at(4).mid(1,2).toInt(&ok1)+
    60*f0.at(4).right(2).toInt(&ok2);
  if((f0.at(4).length()==5)&&(ok1)&&(ok2)) {
    if(f0.at(4).left(1)=="+") {
      tz_offset=-tz_offset;
    }
    else {
      if(f0.at(4).left(1)!="-") {
	if(ok!=NULL) {
	  *ok=false;
	}
	return QDateTime();
      }
    }
  }
  else {
    //
    // Try legacy timezone names (see RFC822 section 5.1)
    //
    QMap<QString,int> zones;
    zones["ut"]=0;
    zones["gmt"]=0;
    zones["z"]=0;
    zones["est"]=-5;
    zones["edt"]=-4;
    zones["cst"]=-6;
    zones["cdt"]=-5;
    zones["mst"]=-7;
    zones["mdt"]=-6;
    zones["pst"]=-8;
    zones["pdt"]=-7;
    // "Military" zone IDs are not implemented (see RFC1123 section 5.2.14)
    if(zones.value(f0.at(4).toLower(),1)>0) {
      if(ok!=NULL) {
	*ok=false;
      }
      return QDateTime();
    }
    tz_offset=-3600*zones.value(f0.at(4).toLower());
  }
  
  if(ok!=NULL) {
    *ok=true;
  }

  return QDateTime(date,time).addSecs(tz_offset-RDTimeZoneOffset());
}