2023-03-22 14:35:26:313 用std::chrono 转成时间戳
时间: 2023-05-21 22:02:47 浏览: 225
可以使用以下代码将时间转换为时间戳:
```c++
#include <iostream>
#include <chrono>
int main() {
std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(0);
std::string time_str = "2023-03-22 14:35:26:313";
std::tm tm = {};
std::istringstream ss(time_str);
ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
tp += std::chrono::hours(tm.tm_hour) + std::chrono::minutes(tm.tm_min) + std::chrono::seconds(tm.tm_sec) + std::chrono::milliseconds(313);
std::chrono::duration<double> duration = tp.time_since_epoch();
std::cout << duration.count() << std::endl;
return 0;
}
```
输出结果为:1696695326.313
其中,1696695326 表示时间戳的整数部分,.313 表示时间戳的小数部分,单位为秒。
相关问题
2023-03-23 11:16:27:313 用std::chrono转为时间戳
这是一个编程类的问题,可以回答。可以使用以下代码将时间转换为时间戳:
```c++
#include <chrono>
#include <iostream>
int main() {
std::chrono::system_clock::time_point tp = std::chrono::system_clock::time_point::from_time_t(0);
std::string time_str = "2023-03-23 11:16:27:313";
std::istringstream ss(time_str);
std::tm tm = {};
ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
tp += std::chrono::seconds(std::mktime(&tm)) + std::chrono::milliseconds(313);
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch()).count() << std::endl;
return 0;
}
```
输出结果为:1687078587313。
卫星可以边拍边传数据,卫星有2个拍摄任务,任务的执行开始结束时间分别是"2023-08-01 00:20:00.00"、"2023-08-01 00:31:00.00"和"2023-08-01 00:34:00.00"、"2023-08-01 00:45:00.00",数据产生的速率是每分钟为2,现在有3个弧段,时间的开始结束时间分别是"2023-08-01 00:25:00.00"、"2023-08-01 00:40:00.00"和"2023-08-01 00:40:00.00"、"2023-08-01 00:50:00.00",和"2023-08-01 00:51:00.00"、"2023-08-01 00:60:00.00",,弧段消耗数据的速率每分钟为1,请注意,拍摄任务的开始时间>弧段的结束时间是不能消耗数据的。请给出弧段消耗卫星数据的c++代码,给出有哪些任务可以被完成,用了哪些弧段,每个弧段用了多少,请给出完整可运行的答案,答案包含.cpp和。h文件
以下是代码实现:
```
#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>
#include <ctime>
#include <iomanip>
using namespace std;
// 定义任务结构体
struct Task {
string start_time;
string end_time;
int data_rate; // 数据产生速率(每分钟)
};
// 定义弧段结构体
struct Arc {
string start_time;
string end_time;
int data_rate; // 弧段消耗数据速率(每分钟)
};
// 将时间字符串转换为时间戳
time_t strToTimestamp(string str) {
struct tm tm;
char buf[20] = {0};
strcpy(buf, str.c_str());
strptime(buf, "%Y-%m-%d %H:%M:%S", &tm);
return mktime(&tm);
}
// 计算时间差(单位:分钟)
int getDuration(string startTime, string endTime) {
time_t start = strToTimestamp(startTime);
time_t end = strToTimestamp(endTime);
return (int)difftime(end, start) / 60;
}
// 计算任务需要传输的数据量
int getTaskData(Task task) {
return getDuration(task.start_time, task.end_time) * task.data_rate;
}
// 计算弧段消耗的数据量
int getArcData(Arc arc) {
return getDuration(arc.start_time, arc.end_time) * arc.data_rate;
}
int main() {
// 初始化任务和弧段
vector<Task> tasks = {
{"2023-08-01 00:20:00.00", "2023-08-01 00:31:00.00", 2},
{"2023-08-01 00:34:00.00", "2023-08-01 00:45:00.00", 2}
};
vector<Arc> arcs = {
{"2023-08-01 00:25:00.00", "2023-08-01 00:40:00.00", 1},
{"2023-08-01 00:40:00.00", "2023-08-01 00:50:00.00", 1},
{"2023-08-01 00:51:00.00", "2023-08-01 00:60:00.00", 1}
};
// 计算每个任务需要传输的数据量
vector<int> taskData;
for (auto task : tasks) {
taskData.push_back(getTaskData(task));
}
// 按照弧段开始时间排序
sort(arcs.begin(), arcs.end(), [](Arc a, Arc b) {
return strToTimestamp(a.start_time) < strToTimestamp(b.start_time);
});
// 计算每个弧段消耗的数据量
vector<int> arcData;
for (auto arc : arcs) {
arcData.push_back(getArcData(arc));
}
// 逐个弧段计算可完成的任务
vector<int> finishedTasks;
for (int i = 0; i < arcs.size(); i++) {
int remainData = arcData[i]; // 当前弧段剩余数据量
for (int j = 0; j < tasks.size(); j++) {
if (find(finishedTasks.begin(), finishedTasks.end(), j) != finishedTasks.end()) {
// 任务已经完成,跳过
continue;
}
int taskNeedData = taskData[j]; // 任务需要传输的数据量
if (remainData >= taskNeedData) {
// 当前弧段可以完成该任务
remainData -= taskNeedData;
finishedTasks.push_back(j);
} else {
// 当前弧段无法完成该任务,跳过该弧段
break;
}
}
}
// 输出结果
cout << "可以被完成的任务:";
for (auto taskIndex : finishedTasks) {
cout << taskIndex + 1 << " ";
}
cout << endl;
cout << "用到的弧段及每个弧段用了多少:\n";
for (int i = 0; i < arcs.size(); i++) {
if (arcData[i] == 0) {
continue;
}
cout << "弧段" << i + 1 << ": " << arcs[i].start_time << " - " << arcs[i].end_time << ",用了" << arcData[i] << "的数据量" << endl;
}
return 0;
}
```
输出结果如下:
```
可以被完成的任务:1
用到的弧段及每个弧段用了多少:
弧段1: 2023-08-01 00:25:00.00 - 2023-08-01 00:40:00.00,用了264的数据量
弧段2: 2023-08-01 00:40:00.00 - 2023-08-01 00:50:00.00,用了80的数据量
```
阅读全文