Хотя это явно не указано для setTimestamp(int parameterIndex, Timestamp x)
, драйверы должны следовать правилам, установленным setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
javadoc :
Устанавливает назначенный параметр в заданное значение
blockquote>java.sql.Timestamp
, используя данный объектCalendar
. Драйвер использует объектCalendar
для построения значения SQLTIMESTAMP
, которое затем отправляет драйвер в базу данных. С помощью объектаCalendar
драйвер может вычислять временную метку с учетом пользовательского часового пояса. Если объектCalendar
не указан, драйвер использует часовой пояс по умолчанию, который используется для виртуальной машины, на которой запущено приложение.Когда вы звоните с помощью
setTimestamp(int parameterIndex, Timestamp x)
, драйвер JDBC использует часовой пояс виртуальной машины для расчета даты и времени временной метки в этом часовом поясе. Эта дата и время - это то, что хранится в базе данных, и если столбец базы данных не хранит информацию о часовом поясе, тогда любая информация о зоне теряется (что означает, что она зависит от приложения (ов), использующего базу данных, чтобы использовать (например, сохранить в отдельной колонке).Например: Ваш часовой пояс GMT + 2. Вы сохраняете «2012-12-25 10 : 00: 00 UTC ". Фактическое значение, хранящееся в базе данных, -« 2012-12-25 12:00:00 ». Вы возвращаете его снова: вы возвращаете его снова как« 2012-12-25 10:00:00 UTC "(но только если вы извлечете его с помощью
getTimestamp(..)
), но когда другое приложение обратится к базе данных в часовом поясе GMT + 0, оно будет получать временную метку как« 2012-12-25 12:00:00 UTC ».Если вы хотите сохранить его в другом часовом поясе, вам нужно использовать
setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
с экземпляром календаря в требуемом часовом поясе. Просто убедитесь, что вы также используете эквивалентный геттер с тем же часовым поясом, когда получение значений (если вы seTIMESTAMP
без информации о часовом поясе в вашей базе данных).Итак, если вы хотите сохранить фактический часовой пояс GMT, вам нужно использовать:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); stmt.setTimestamp(11, tsSchedStartTime, cal);
С JDBC 4.2 совместимый драйвер должен поддерживать
java.time.LocalDateTime
(иjava.time.LocalTime
) дляTIMESTAMP
(иTIME
) черезget/set/updateObject
. Классыjava.time.Local*
не имеют временных зон, поэтому преобразование не требуется (хотя это может открыть новый набор проблем, если ваш код действительно принял определенный часовой пояс).
foreach (glob("classes/*.php") as $filename)
{
include $filename;
}
Вот способ, которым я включаю много классов от нескольких папок в PHP 5. Это будет только работать, если у Вас будут классы все же.
/*Directories that contain classes*/
$classesDir = array (
ROOT_DIR.'classes/',
ROOT_DIR.'firephp/',
ROOT_DIR.'includes/'
);
function __autoload($class_name) {
global $classesDir;
foreach ($classesDir as $directory) {
if (file_exists($directory . $class_name . '.php')) {
require_once ($directory . $class_name . '.php');
return;
}
}
}
Я предлагаю, чтобы Вы использовали readdir () функция и затем цикл и включали файлы (см. 1-й пример на той странице).
При использовании php 5, Вы могли бы хотеть использовать автозагрузка вместо этого.