我认为如果你通过MySQL一个Epoch时间戳(作为一个长)并使用FROM_UNIXTIME()
将它作为一个可比较的日期,那么服务器的时区就不重要了。但确实如此(至少在我们的设置中 - 我们需要特定的配置吗?)。
使用MySQL版本: mysql版本14.14使用readline 5.1分发5.5.48-37.8,适用于Linux(x86_64)
我从我的服务器设置为UTC开始。
当我运行查询时:
SELECT COUNT(*) FROM Orders
WHERE startTime BETWEEN FROM_UNIXTIME(1486509895) AND FROM_UNIXTIME(1486596296);
我收到了127份订单。
然后我将时区切换为EST:
sudo mv /etc/localtime /etc/localtime.bak
sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
sudo service mysql3306 restart
然后我再次运行查询,这次我得到196个订单!
为什么我的服务器的时区会影响它?时代不应受此影响。
答案 0 :(得分:2)
The documentation for FROM_UNIXTIMESTAMP()
明确指出:
以
widget
或#!/usr/bin/env python3 import sys import crypt from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QMainWindow, QLabel, QLineEdit, QPushButton, QWidget, QApplication, QSystemTrayIcon, QFrame, QGridLayout) class MyApp(QWidget): def __init__(self, parent=None): super().__init__(parent) self.saltLabel = QLabel("Salt:") self.saltLine = QLineEdit() self.saltLine.setPlaceholderText("e.g. $6$xxxxxxxx") self.passwordLabel = QLabel("Password:") self.passwordLine = QLineEdit() self.hashLabel = QLabel("Hash:") self.hashSunkenLabel = QLabel() # widget.hashSunkenLabel.setFrameStyle(QFrame.Box | QFrame.Sunken) self.hashSunkenLabel.setFrameShadow(QFrame.Sunken) self.resultButton = QPushButton("&Calculate", self) self.resultButton.setMaximumSize(100, 50) self.initui() def initui(self): # main window size, title and icon self.setGeometry(300, 300, 500, 150) self.setWindowTitle("Password hash calculator | Linux") # set layout grid = QGridLayout() grid.addWidget(self.passwordLabel, 0, 0) grid.addWidget(self.passwordLine, 0, 1) grid.addWidget(self.saltLabel, 1, 0) grid.addWidget(self.saltLine, 1, 1) grid.addWidget(self.resultButton, 2, 1) grid.addWidget(self.hashLabel, 3, 0) grid.addWidget(self.hashSunkenLabel, 3, 1) self.setLayout(grid) self.resultButton.clicked.connect(self.logic) def logic(self): """ Calculates hash from salt and password """ salt = self.saltLine.text() password = self.passwordLine.text() resulting_hash = crypt.crypt(password, salt) self.hashSunkenLabel.setText(resulting_hash) # sender = self.sender() # print(sender) # print(dir(MyApp)) def main(): app = QApplication(sys.argv) instance = MyApp() instance.show() sys.exit(app.exec_()) if __name__ == "__main__": main()
格式返回unix_timestamp参数的表示形式,具体取决于函数是在字符串还是数字上下文中使用。 该值以当前时区表示。 unix_timestamp是内部时间戳值,例如YYYY-MM-DD HH:MM:SS
函数生成的值。
这就是为什么我强烈建议您使用UTC运行服务器并在应用程序中进行任何转换,或者为查询指定偏移量。
大纪元时间(例如,UNIX YYYYMMDDHHMMSS
)以UTC表示,但如果您的环境中指定了时区,则可以在本地时间始终呈现,无论是MySQL还是其他方式。原始数值不会根据您的时区而改变,实际上它根本没有时区概念,但将其转换为UNIX_TIMESTAMP()
格式的字符串绝对需要时区提出任何有意义的东西。
答案 1 :(得分:1)
当然时区很重要。 --force
将即时转换为日期/时间表示。但是,给定的时刻可以代表不同的日期或时间,具体取决于时区。正如documentation明确指出:
该值以当前时区表示。