我有字符串类型的日期,那么我需要比较这两个日期
我已经尝试过了,但是显示出奇怪的输出结果
string str="2019-1-12";
string str1="2019-1-13";
tm timeDate;
tm timeDate1;
strptime(str.c_str(),"%Y-%m-%d ", &timeDate);
time_t time_input = mktime(&timeDate);
strptime(str1.c_str(),"%Y-%m-%d ", &timeDate1);
time_t time_input1 = mktime(&timeDate1);
double timeDiff = difftime(time_input,time_input1);
cout<<timeDiff;
答案 0 :(得分:5)
制作
tm timeDate = {};
tm timeDate1 = {};
换句话说,在tm
调用之前,将strptime
结构的所有成员初始化为零。 strptime
仅填充具有格式说明符的成员;其余的仍然是垃圾。
有了此更改,your code works
答案 1 :(得分:0)
小于,等于,大于另一个日期
当日期为“ YYYY-mm-dd”格式的字符串时,这是一种特殊情况,其中字符串的小于运算符给出的结果与假设日期类的小于运算符相同。这是因为日期以“大尾数”格式存储,日期中的每个数字也都是“大尾数”。
字符串小于运算符将每个字符一个一个地比较,如果一个小于另一个,那么这就是整个比较的结果。
您唯一需要做的就是确保您的月和日字段均为两个字符(如果是一个字符,则在前面加上零),然后比较字符串。
void getSymptomData() {
final CollectionReference colRef = db.collection("users").document(user_id).collection("symptom_data");
colRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<String> list = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getId());
DocumentReference docRef = colRef.document(document.getId());
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d("Iteration", "DocumentSnapshot data: " + document.getData());
} else {
Log.d("NoDoc", "No such document");
}
} else {
Log.d("Failed", "get failed with ", task.getException());
}
}
});
}
Log.d("listylist", list.toString());
} else {
Log.d("tag", "Error getting documents: ", task.getException());
}
}
});
}
同上用于平等比较。