如何使用ISO 8601和RFC 3339的格式标准生成日期时间戳?
目标是一个如下所示的字符串:
"2015-01-01T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
格式:
最佳案例:
我搜索过StackOverflow,Google,Apple等,并没有找到Swift的答案.
似乎最有前途的类NSDate,NSDateFormatter,NSTimeZone.
相关问答:如何在iOS中获得ISO 8601日期?
这是迄今为止我提出的最好的:
var now = NSDate()
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
println(formatter.stringFromDate(now))
Run Code Online (Sandbox Code Playgroud) 我正在尝试从Firebase订购我的数据,因此最新的帖子位于顶部(如Instagram),但我无法让它正常工作.我应该使用服务器时间戳吗?是否有"createdAt"字段?
func getPosts() {
POST_REF.observeEventType(.Value, withBlock: { snapshot in
guard let posts = snapshot.value as? [String : [String : String]] else {
print("No Posts Found")
return
}
Post.feed?.removeAll()
for (postID, post) in posts {
let newPost = Post.initWithPostID(postID, postDict: post)!
Post.feed?.append(newPost)
}
Post.feed? = (Post.feed?.reverse())!
self.tableView.reloadData()
}, withCancelBlock: { error in
print(error.localizedDescription)
})
}
Run Code Online (Sandbox Code Playgroud) 我的数据库结构是这样的:
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
"score": 4,
},
"ghopper": { ... },
"eclarke": { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
我试图按降序检索前20个分数.
let queryRef = FIRDatabase.database().reference().child("users").queryOrderedByChild("score").queryLimitedToLast(20)
queryRef.observeSingleEventOfType(.Value, withBlock: { (querySnapShot) in
print(querySnapShot.value)
})
Run Code Online (Sandbox Code Playgroud)
我想要输出像
score": 4
score": 3
score": 2
or
score": 2
score": 3
score": 4
or
2
3
4
Run Code Online (Sandbox Code Playgroud)
请让我知道如何解决这个问题.
这是我的firebase的屏幕截图:
我试图在firebase数据库中检索最高的100分我使用此代码将新节点添加到firebase:
Map<String, String> post1 = new HashMap<String, String>();
post1.put("name",name);
post1.put("score",score);
myRef.push().setValue(post1);
Run Code Online (Sandbox Code Playgroud)
这是我用来检索最高100分不起作用的代码(代码有效,但它没有检索到最高的100分)
Query queryRef = myRef.orderByChild("score").limitToFirst(100);
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
Score score=postSnapshot.getValue(Score.class);
Log.d("test"," values is " + score.getName() + " " + score.getScore());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Run Code Online (Sandbox Code Playgroud)