我有这段代码:
class ReportsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var reportList:[String] = []
var ref: DatabaseReference!
var handle: DatabaseHandle?
var pageStatus = "default"
@IBOutlet weak var reportsTableView: UITableView!
@IBAction func backButtonPressed(_ sender: UIButton) {
self.performSegue(withIdentifier: "reportsToHome", sender: self)
}
@IBOutlet weak var segmentControl: UISegmentedControl!
@IBAction func segmentControlPressed(_ sender: UISegmentedControl) {
switch segmentControl.selectedSegmentIndex
{
case 0:
self.pageStatus = "unclaimed";
self.reportsTableView.reloadData()
print("0 selected " + self.pageStatus)
return;
case 1:
self.pageStatus = "complete";
self.reportsTableView.reloadData()
print("1 selected " + self.pageStatus)
return;
case 2:
self.pageStatus = "cancelled";self.reportsTableView.reloadData()
print("2 selected " + self.pageStatus)
return;
default:
break;
}
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return reportList.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = reportList[indexPath.row]
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in
if let reports = snapshot.value as? NSDictionary {
let firstName = reports["firstName"] as? String
let lastName = reports["lastName"] as? String
let user = reports["user"] as? String
let status = reports["status"] as? String
let userID = Auth.auth().currentUser?.uid
for report in reports{
if user == userID{
if status == self.pageStatus{
self.reportList.append(firstName! + " " + lastName!)
self.reportsTableView.reloadData()
}
else{
print("not again")
print(self.pageStatus)
print(status)
}
}
else{
print(status ?? "page status" + self.pageStatus);
print(user);
print(userID)
}
}
}
// Do any additional setup after loading the view.
}
)}
它也不适用于“Sep”和%b,i。即它不适用于字符。 我做错了什么?
答案 0 :(得分:2)
如果您检查tm
的内容,那么它应该是您所期望的。
get_time
的 %a
将解析为tm_wday
。
但是mktime
根本不使用tm_wday
和tm_yday
,而是仅使用其他字段。事实上,mktime
实际设置这些字段(这就是为什么tm输入不能是const
)基于其他字段。
因此,你有效地将一堆零传递给它,特别是tm_year
,并且许多平台上的time_t
是自1970年以来的秒,并且尽管经常签名,但他们认为1970年之前的时间无效。 / p>
例如,对于MSVC,time_t
是一个64位有符号整数,但mktime is documented仅对“1970年1月1日到2000年12月31日23:59:59”有效
答案 1 :(得分:0)
您的来电可能会成功写入t->tm_wday
,但之后使用mktime时,time->tm_wday
中的值会被忽略:
<强>的std :: mktime 强>
... time-&gt; tm_wday和time-&gt; tm_yday被忽略。时间的价值是 允许超出正常范围。 ...
因此,您在tm
中写入的所有内容都会被忽略,结果无法表示为time_t
,因此返回值为-1
。
与mktime
相比,std::put_time
使用相应的值,但会针对输出重新解释它们(这样February
可能变成Feb
):
int main ()
{
std::tm t = {};
istringstream ss("Thursday February");
ss >> std::get_time(&t, "%a %b");
if (ss.fail()) {
cout << "invalid date value." << endl;
}
else {
std::cout << "Date: " << std::put_time(&t, "%a %b") << endl;
}
return 0;
}
输出:
Date: Thu Feb