我想从Firebase获取当前的UTC时间戳。我从设备获得UTC时间戳,但我改变了这种方法,以便用户不使用电话时间&使用无法更改的Firebase时间。
我使用下面的代码,但它不会返回我的时间戳。
print("server value \(FIRServerValue.timestamp())")
它给我的价值为[AnyHashable(".sv"): timestamp]
我也试过这个
let objectToSave = ["date": [".sv": "timestamp"]]
print("timestamp \(objectToSave)")
现在我有两个问题:
答案 0 :(得分:0)
所以,我将把答案分成两部分来匹配你的两个问题:
•这是一个好方法吗?
这取决于您的应用程序的功能以及您希望它如何工作。例如,对于一个游戏,你可能有一个功能,玩家应该等一个小时才能再次玩,它实际上是击败用户的唯一解决方案"作弊"通过转发其设备的时钟。但是,如果您的应用程序是消息传递应用程序或其他任何东西,您可以有两种方法:(1)您不关心什么是实时,因为您的代码可以对任何情况作出反应(将来的日期或类似的情况)那个),(2)你认为它会让你的app运行更顺畅,因为你可以防止边缘情况发生,在这种情况下,你应该得到实时。
您可以考虑的另一个例子是Apple自己的应用程序。我玩了很多MacBook的内部时间,用Xcode和iOS模拟器测试我自己应用程序未来或过去的事件。我意识到Xcode甚至Finder都是基于Mac告诉他们的时间。所以我最终得到了两个月内创建的文件和Xcode日志。
•如何获取时间戳值?
您似乎没有正确访问FIRServerValue.timeStamp()。 Firebase文档说它返回如下:private void button1_Click(object sender, EventArgs e)
{
string[] userdetails = File.ReadAllLines(AppDomain.CurrentDomain.BaseDirectory + "UserDetails.txt");
bool usernameFound = false;
foreach (string user in userdetails)
{
string[] splitDetails = user.Split(':');
Login.username = splitDetails[0];
Login.password = splitDetails[1];
label1.Text = Login.username;
label2.Text = Login.password;
if (txtUsername.Text == Login.username)
{
if (txtPassword.Text == Login.Password)
{
MessageBox.Show("Welcome " + Login.username);
this.Hide();
frmMainMenu menu = new frmMainMenu();
menu.Show();
return; // we're done here, so return instead of break
}
usernameFound = true;
break; // we're not gonna find this username again, so might as well quit the loop
}
}
//we only get there if the credentials were incorrect
//so we check if the username was found, if yes, the
//password was incorrect, if not, the username was
string message = String.Empty;
if (usernameFound)
message = "Password";
else
message = "Username";
message += " incorrect";
MessageBox.Show(message);
//or shorten the above 7 lines with a ternary operator
//MessageBox.Show((usernameFound ? "Password" : "Username") + " incorrect");
}
。为了操纵你从Firebase获得的结果,我建议你查看这两个类似的帖子来更详细地处理这个问题: