本文整理汇总了C++中DateAndTime类的典型用法代码示例。如果您正苦于以下问题:C++ DateAndTime类的具体用法?C++ DateAndTime怎么用?C++ DateAndTime使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DateAndTime类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: accept
void StartLiveDataDialog::accept()
{
// Now manually set the StartTime property as there's a computation needed
DateAndTime startTime = DateAndTime::getCurrentTime() - ui.dateTimeEdit->value()*60.0;
m_algorithm->setPropertyValue("StartTime",startTime.toISO8601String());
AlgorithmDialog::accept(); // accept executes the algorithm
}
示例2: processErrorStates
/** Process any HTTP errors states.
@param res : The http response
@param rs : The iutput stream from the response
@param url : The url originally called
@exception Mantid::Kernel::Exception::InternetError : Coded for the failure
state.
*/
int InternetHelper::processErrorStates(const Poco::Net::HTTPResponse &res,
std::istream &rs,
const std::string &url) {
int retStatus = res.getStatus();
g_log.debug() << "Answer from web: " << res.getStatus() << " "
<< res.getReason() << std::endl;
// get github api rate limit information if available;
int rateLimitRemaining;
DateAndTime rateLimitReset;
try {
rateLimitRemaining =
boost::lexical_cast<int>(res.get("X-RateLimit-Remaining", "-1"));
rateLimitReset.set_from_time_t(
boost::lexical_cast<int>(res.get("X-RateLimit-Reset", "0")));
} catch (boost::bad_lexical_cast const &) {
rateLimitRemaining = -1;
}
if (retStatus == HTTP_OK) {
throw Exception::InternetError("Response was ok, processing should never "
"have entered processErrorStates",
retStatus);
} else if (retStatus == HTTP_FOUND) {
throw Exception::InternetError("Response was HTTP_FOUND, processing should "
"never have entered processErrorStates",
retStatus);
} else if (retStatus == HTTP_MOVED_PERMANENTLY) {
throw Exception::InternetError("Response was HTTP_MOVED_PERMANENTLY, "
"processing should never have entered "
"processErrorStates",
retStatus);
} else if (retStatus == HTTP_NOT_MODIFIED) {
throw Exception::InternetError("Not modified since provided date" +
rateLimitReset.toSimpleString(),
retStatus);
} else if ((retStatus == HTTP_FORBIDDEN) && (rateLimitRemaining == 0)) {
throw Exception::InternetError(
"The Github API rate limit has been reached, try again after " +
rateLimitReset.toSimpleString(),
retStatus);
} else {
std::stringstream info;
std::stringstream ss;
Poco::StreamCopier::copyStream(rs, ss);
if (retStatus == HTTP_NOT_FOUND)
info << "Failed to download " << url << " with the link "
<< "<a href=\"" << url << "\">.\n"
<< "Hint. Check that link is correct</a>";
else {
// show the error
info << res.getReason();
info << ss.str();
g_log.debug() << ss.str();
}
throw Exception::InternetError(info.str() + ss.str(), retStatus);
}
}
示例3: dateTime
/**
* Shift the times in a log of a string property
* @param logEntry :: the string property
* @param timeShift :: the time shift.
*/
void ChangeTimeZero::shiftTimeOfLogForStringProperty(
PropertyWithValue<std::string> *logEntry, double timeShift) const {
// Parse the log entry and replace all ISO8601 strings with an adjusted value
auto value = logEntry->value();
if (checkForDateTime(value)) {
DateAndTime dateTime(value);
DateAndTime shiftedTime = dateTime + timeShift;
logEntry->setValue(shiftedTime.toISO8601String());
}
}
示例4: saveTimeVector
void saveTimeVector(::NeXus::File * file, TimeSeriesProperty<NumT> * prop)
{
std::vector<DateAndTime> times = prop->timesAsVector();
DateAndTime start = times[0];
std::vector<double> timeSec(times.size());
for (size_t i=0; i<times.size(); i++)
timeSec[i] = double(times[i].totalNanoseconds() - start.totalNanoseconds()) * 1e-9;
file->writeData("time", timeSec);
file->openData("time");
file->putAttr("start", start.toISO8601String() );
file->closeData();
}
示例5: run
void PolicyEnforcementEngine::run()
{
PolicyEnforcement* aPolicyEnforcement;
PolicyEnforcementContainerIterator iter;
DateAndTime currentTime;
int waitingSleepTime = 1;
int sleepTimeSeconds = 1;
while (1)
{
if(policyEnforcements.size() != 0)
{
currentTime.update();
{
boost::mutex::scoped_lock lock(mtx);
iter = policyEnforcements.begin();
}
std::cout << "PolicyEnforcementEngine::run() - First element: '" << (*iter)->getName() << "' has start time = " << (*iter)->getStart() << endl;
std::cout << "PolicyEnforcementEngine::run() - Current time: '" << currentTime << endl;
if (currentTime == (*iter)->getStart() )
{
std::cout << "PolicyEnforcementEngine::run() - Removing and running top element in PolicyEnforcement Container ..." << endl;
aPolicyEnforcement = popContainer();
aPolicyEnforcement->run();
}
else
{
std::cout << "PolicyEnforcementEngine::run() - Waiting to run next PolicyEnforcement ..." << endl;
sleep(waitingSleepTime);
}
}
else
{
std::cout << "PolicyEnforcementEngine::run() - Waiting for new PolicyEnforcements ..." << endl;
sleep(waitingSleepTime);
}
}
}
示例6: processResponseHeaders
void GitHubApiHelper::processResponseHeaders(
const Poco::Net::HTTPResponse &res) {
// get github api rate limit information if available;
int rateLimitRemaining = 0;
int rateLimitLimit;
DateAndTime rateLimitReset;
try {
rateLimitLimit =
boost::lexical_cast<int>(res.get("X-RateLimit-Limit", "-1"));
rateLimitRemaining =
boost::lexical_cast<int>(res.get("X-RateLimit-Remaining", "-1"));
rateLimitReset.set_from_time_t(
boost::lexical_cast<int>(res.get("X-RateLimit-Reset", "0")));
} catch (boost::bad_lexical_cast const &) {
rateLimitLimit = -1;
}
if (rateLimitLimit > -1) {
g_log.debug() << "GitHub API " << rateLimitRemaining << " of "
<< rateLimitLimit << " calls left. Resets at "
<< rateLimitReset.toSimpleString() << " GMT\n";
}
}
示例7: while
/** Execute the algorithm.
*/
void LoadLiveData::exec() {
// The full, post-processed output workspace
m_outputWS = this->getProperty("OutputWorkspace");
// Validate inputs
if (this->hasPostProcessing()) {
if (this->getPropertyValue("AccumulationWorkspace").empty())
throw std::invalid_argument("Must specify the AccumulationWorkspace "
"parameter if using PostProcessing.");
// The accumulated but not post-processed output workspace
m_accumWS = this->getProperty("AccumulationWorkspace");
} else {
// No post-processing, so the accumulation and output are the same
m_accumWS = m_outputWS;
}
// Get or create the live listener
ILiveListener_sptr listener = this->getLiveListener();
// Do we need to reset the data?
bool dataReset = listener->dataReset();
// The listener returns a MatrixWorkspace containing the chunk of live data.
Workspace_sptr chunkWS;
bool dataNotYetGiven = true;
while (dataNotYetGiven) {
try {
chunkWS = listener->extractData();
dataNotYetGiven = false;
} catch (Exception::NotYet &ex) {
g_log.warning() << "The " << listener->name()
<< " is not ready to return data: " << ex.what() << "\n";
g_log.warning()
<< "Trying again in 10 seconds - cancel the algorithm to stop.\n";
const int tenSeconds = 40;
for (int i = 0; i < tenSeconds; ++i) {
Poco::Thread::sleep(10000 / tenSeconds); // 250 ms
this->interruption_point();
}
}
}
// TODO: Have the ILiveListener tell me exactly the time stamp
DateAndTime lastTimeStamp = DateAndTime::getCurrentTime();
this->setPropertyValue("LastTimeStamp", lastTimeStamp.toISO8601String());
// Now we process the chunk
Workspace_sptr processed = this->processChunk(chunkWS);
bool PreserveEvents = this->getProperty("PreserveEvents");
EventWorkspace_sptr processedEvent =
boost::dynamic_pointer_cast<EventWorkspace>(processed);
if (!PreserveEvents && processedEvent) {
// Convert the monitor workspace, if there is one and it's necessary
MatrixWorkspace_sptr monitorWS = processedEvent->monitorWorkspace();
auto monitorEventWS =
boost::dynamic_pointer_cast<EventWorkspace>(monitorWS);
if (monitorEventWS) {
auto monAlg = this->createChildAlgorithm("ConvertToMatrixWorkspace");
monAlg->setProperty("InputWorkspace", monitorEventWS);
monAlg->executeAsChildAlg();
if (!monAlg->isExecuted())
g_log.error(
"Failed to convert monitors from events to histogram form.");
monitorWS = monAlg->getProperty("OutputWorkspace");
}
// Now do the main workspace
Algorithm_sptr alg = this->createChildAlgorithm("ConvertToMatrixWorkspace");
alg->setProperty("InputWorkspace", processedEvent);
std::string outputName = "__anonymous_livedata_convert_" +
this->getPropertyValue("OutputWorkspace");
alg->setPropertyValue("OutputWorkspace", outputName);
alg->execute();
if (!alg->isExecuted())
throw std::runtime_error("Error when calling ConvertToMatrixWorkspace "
"(since PreserveEvents=False). See log.");
// Replace the "processed" workspace with the converted one.
MatrixWorkspace_sptr temp = alg->getProperty("OutputWorkspace");
if (monitorWS)
temp->setMonitorWorkspace(monitorWS); // Set back the monitor workspace
processed = temp;
}
// How do we accumulate the data?
std::string accum = this->getPropertyValue("AccumulationMethod");
// If the AccumulationWorkspace does not exist, we always replace the
// AccumulationWorkspace.
// Also, if the listener said we are resetting the data, then we clear out the
// old.
if (!m_accumWS || dataReset)
accum = "Replace";
g_log.notice() << "Performing the " << accum << " operation.\n";
// Perform the accumulation and set the AccumulationWorkspace workspace
//.........这里部分代码省略.........
示例8: getPreviousValue
/** Set a value for a widget.
*
* The function needs to know about the types of widgets
* that are being used. Currently it knows about QComboBox, QLineEdit and
* QCheckBox
* @param widget :: A pointer to the widget
* @param propName :: The property name
*/
void AlgorithmDialog::setPreviousValue(QWidget *widget,
const QString &propName) {
// If is called from a script, check if we have such property
if (isForScript() && !getAlgorithmProperty(propName))
return;
QString value = getPreviousValue(propName);
Mantid::Kernel::Property *property = getAlgorithmProperty(propName);
// Do the right thing for the widget type
if (QComboBox *opts = qobject_cast<QComboBox *>(widget)) {
if (property && value.isEmpty()) {
value = QString::fromStdString(property->value());
}
int index = opts->findText(value);
if (index >= 0) {
opts->setCurrentIndex(index);
}
return;
}
if (QAbstractButton *checker = qobject_cast<QAbstractButton *>(widget)) {
if (value.isEmpty() &&
dynamic_cast<Mantid::Kernel::PropertyWithValue<bool> *>(property))
value = QString::fromStdString(property->value());
checker->setChecked(value != "0");
return;
}
if (QDateTimeEdit *dateEdit = qobject_cast<QDateTimeEdit *>(widget)) {
// String in ISO8601 format
DateAndTime t = DateAndTime::getCurrentTime();
try {
t.setFromISO8601(verifyAndSanitizeISO8601(value.toStdString()));
} catch (std::exception &) {
}
dateEdit->setDate(QDate(t.year(), t.month(), t.day()));
dateEdit->setTime(QTime(t.hour(), t.minute(), t.second(), 0));
return;
}
QLineEdit *textfield = qobject_cast<QLineEdit *>(widget);
MantidWidget *mtdwidget = qobject_cast<MantidWidget *>(widget);
if (textfield || mtdwidget) {
if (!isForScript()) {
if (textfield)
textfield->setText(value);
else
mtdwidget->setUserInput(value);
} else {
// Need to check if this is the default value as we don't fill them in if
// they are
if (m_python_arguments.contains(propName) || !property->isDefault()) {
if (textfield)
textfield->setText(value);
else
mtdwidget->setUserInput(value);
}
}
return;
}
PropertyWidget *propWidget = qobject_cast<PropertyWidget *>(widget);
if (propWidget) {
propWidget->setPreviousValue(value);
return;
}
// Reaching here means we have a widget type we don't understand. Tell the
// developer
QMessageBox::warning(
this, windowTitle(),
QString("Cannot set value for ") + widget->metaObject()->className() +
". Update AlgorithmDialog::setValue() to cope with this widget.");
}
示例9: ISO8601StringPlusSpace
/** Circumvent a bug in IPython 1.1, which chokes on nanosecond precision
* datetimes.
* Adding a space to the string returned by the C++ method avoids it being
* given
* the special treatment that leads to the problem.
*/
std::string ISO8601StringPlusSpace(DateAndTime &self) {
return self.toISO8601String() + " ";
}
示例10:
/** Subtract two times.
* @param rhs object on right of operation
* @return a time_duration
*/
time_duration DateAndTime::operator-(const DateAndTime& rhs) const
{
return this->to_ptime() - rhs.to_ptime();
}
示例11: getProperty
/** Execute the algorithm.
*/
void MonitorLiveData::exec() {
double UpdateEvery = getProperty("UpdateEvery");
if (UpdateEvery <= 0)
throw std::runtime_error("UpdateEvery must be > 0");
// Get the listener (and start listening) as early as possible
ILiveListener_sptr listener = this->getLiveListener();
// Grab ownership of the pointer in the LOCAL listener variable.
// This will make the listener destruct if the algorithm throws,
// but the Algorithm is still in the list of "Managed" algorithms.
m_listener.reset();
// The last time we called LoadLiveData.
// Since StartLiveData _just_ called it, use the current time.
DateAndTime lastTime = DateAndTime::getCurrentTime();
m_chunkNumber = 0;
int runNumber = 0;
int prevRunNumber = 0;
std::string AccumulationWorkspace =
this->getPropertyValue("AccumulationWorkspace");
std::string OutputWorkspace = this->getPropertyValue("OutputWorkspace");
std::string NextAccumulationMethod =
this->getPropertyValue("AccumulationMethod");
// Keep going until you get cancelled
while (true) {
// Exit if the user presses cancel
this->interruption_point();
// Sleep for 50 msec
Poco::Thread::sleep(50);
DateAndTime now = DateAndTime::getCurrentTime();
double seconds = DateAndTime::secondsFromDuration(now - lastTime);
if (seconds > UpdateEvery) {
lastTime = now;
g_log.notice() << "Loading live data chunk " << m_chunkNumber << " at "
<< now.toFormattedString("%H:%M:%S") << '\n';
// Time to run LoadLiveData again
Algorithm_sptr alg = createChildAlgorithm("LoadLiveData");
LoadLiveData *loadAlg = dynamic_cast<LoadLiveData *>(alg.get());
if (!loadAlg)
throw std::runtime_error("Error creating LoadLiveData Child Algorithm");
loadAlg->setChild(true);
// So the output gets put into the ADS
loadAlg->setAlwaysStoreInADS(true);
// Too much logging
loadAlg->setLogging(false);
loadAlg->initialize();
// Copy settings from THIS to LoadAlg
loadAlg->copyPropertyValuesFrom(*this);
// Give the listener directly to LoadLiveData (don't re-create it)
loadAlg->setLiveListener(listener);
// Override the AccumulationMethod when a run ends.
loadAlg->setPropertyValue("AccumulationMethod", NextAccumulationMethod);
// Run the LoadLiveData
loadAlg->executeAsChildAlg();
NextAccumulationMethod = this->getPropertyValue("AccumulationMethod");
if (runNumber == 0) {
runNumber = listener->runNumber();
g_log.debug() << "Run number set to " << runNumber << '\n';
}
// Did we just hit a run transition?
ILiveListener::RunStatus runStatus = listener->runStatus();
if (runStatus == ILiveListener::EndRun) {
// Need to keep track of what the run number *was* so we
// can properly rename workspaces
prevRunNumber = runNumber;
}
if ((runStatus == ILiveListener::BeginRun) ||
(runStatus == ILiveListener::EndRun)) {
std::stringstream message;
message << "Run";
if (runNumber != 0)
message << " #" << runNumber;
message << " ended. ";
std::string RunTransitionBehavior =
this->getPropertyValue("RunTransitionBehavior");
if (RunTransitionBehavior == "Stop") {
g_log.notice() << message.str() << "Stopping live data monitoring.\n";
break;
} else if (RunTransitionBehavior == "Restart") {
g_log.notice() << message.str() << "Clearing existing workspace.\n";
NextAccumulationMethod = "Replace";
} else if (RunTransitionBehavior == "Rename") {
g_log.notice() << message.str() << "Renaming existing workspace.\n";
NextAccumulationMethod = "Replace";
//.........这里部分代码省略.........
示例12: getProperty
/**
* Execute the algorithm.
*/
void RebinByTimeBase::exec() {
using Mantid::DataObjects::EventWorkspace;
IEventWorkspace_sptr inWS = getProperty("InputWorkspace");
if (!boost::dynamic_pointer_cast<EventWorkspace>(inWS)) {
const std::string algName = this->name();
throw std::invalid_argument(
algName + " Algorithm requires an EventWorkspace as an input.");
}
MatrixWorkspace_sptr outputWS = getProperty("OutputWorkspace");
// retrieve the properties
const std::vector<double> inParams = getProperty("Params");
std::vector<double> rebinningParams;
// workspace independent determination of length
const int histnumber = static_cast<int>(inWS->getNumberHistograms());
const uint64_t nanoSecondsInASecond = static_cast<uint64_t>(1e9);
const DateAndTime runStartTime = inWS->run().startTime();
// The validator only passes parameters with size 1, or 3xn.
double tStep = 0;
if (inParams.size() >= 3) {
// Use the start of the run to offset the times provided by the user. pulse
// time of the events are absolute.
const DateAndTime startTime = runStartTime + inParams[0];
const DateAndTime endTime = runStartTime + inParams[2];
// Rebinning params in nanoseconds.
rebinningParams.push_back(
static_cast<double>(startTime.totalNanoseconds()));
tStep = inParams[1] * nanoSecondsInASecond;
rebinningParams.push_back(tStep);
rebinningParams.push_back(static_cast<double>(endTime.totalNanoseconds()));
} else if (inParams.size() == 1) {
const uint64_t xmin = getMinX(inWS);
const uint64_t xmax = getMaxX(inWS);
rebinningParams.push_back(static_cast<double>(xmin));
tStep = inParams[0] * nanoSecondsInASecond;
rebinningParams.push_back(tStep);
rebinningParams.push_back(static_cast<double>(xmax));
}
// Validate the timestep.
if (tStep <= 0) {
throw std::invalid_argument(
"Cannot have a timestep less than or equal to zero.");
}
// Initialize progress reporting.
Progress prog(this, 0.0, 1.0, histnumber);
MantidVecPtr XValues_new;
// create new X axis, with absolute times in seconds.
const int ntcnew = VectorHelper::createAxisFromRebinParams(
rebinningParams, XValues_new.access());
ConvertToRelativeTime transformToRelativeT(runStartTime);
// Transform the output into relative times in seconds.
MantidVec OutXValues_scaled(XValues_new->size());
std::transform(XValues_new->begin(), XValues_new->end(),
OutXValues_scaled.begin(), transformToRelativeT);
outputWS = WorkspaceFactory::Instance().create("Workspace2D", histnumber,
ntcnew, ntcnew - 1);
WorkspaceFactory::Instance().initializeFromParent(inWS, outputWS, true);
// Copy all the axes
for (int i = 1; i < inWS->axes(); i++) {
outputWS->replaceAxis(i, inWS->getAxis(i)->clone(outputWS.get()));
outputWS->getAxis(i)->unit() = inWS->getAxis(i)->unit();
}
// X-unit is relative time since the start of the run.
outputWS->getAxis(0)->unit() = boost::make_shared<Units::Time>();
// Copy the units over too.
for (int i = 1; i < outputWS->axes(); ++i) {
outputWS->getAxis(i)->unit() = inWS->getAxis(i)->unit();
}
outputWS->setYUnit(inWS->YUnit());
outputWS->setYUnitLabel(inWS->YUnitLabel());
// Assign it to the output workspace property
setProperty("OutputWorkspace", outputWS);
// Go through all the histograms and set the data
doHistogramming(inWS, outputWS, XValues_new, OutXValues_scaled, prog);
}
示例13: ConvertToRelativeTime
explicit ConvertToRelativeTime(const DateAndTime &offSet)
: m_offSet(static_cast<double>(offSet.totalNanoseconds()) * 1e-9) {}