对你来说很划清楚.
我从IPInfoDB的API中获取地理IP数据,它返回UTC的时区偏移,包括 DST(如果当前反映).
例如,我住在EST(-5),目前它是DST,所以geo IP API返回(-04:00)作为偏移量.
这很好,因为DST是一个令人头疼的问题.但令我惊讶的是,它引起了另一次头痛.
我在PHP中加载这些数据,通过AJAX传递给应用程序.我想在应用程序上获得IP地址的实时本地时间.
我有完美的设置,但我疯狂试图找出如何设置PHP时区以匹配偏移量,所以我可以抓住当前的小时date('H');和分钟date('i');通过AJAX传递.
我不确定是否有一个特定的功能可以根据该偏移给我当前的小时和分钟,或者是否有一种实用的方法来根据偏移设置时区(如果有效,将会应用DST) .
我一直在搜索和搜索谷歌以找到答案,但我正在做的更具体,因为已经应用了夏令时.
我在PHP.net上找到了一个似乎可以解决问题的功能(它适用于我的时区并返回正确的时间),但对于其他时区如PST,它比它应该返回1小时后即使偏移是正确的(-07:00与DST).
从函数返回的时区是Chile/EasterIsland我感觉到的原因.如果可以的话,我会让这只适用于美国,但我确实需要它在全球范围内.
这是我现在的功能.请原谅极其凌乱的代码.在过去的几个小时里,我一直在玩弄很多东西试图找出解决方案.
大部分功能都是在线发现的.
function offsetToTZ($offset) {
switch((string) $offset) {
case '-04:30' : return 'America/Caracas'; break;
case '-03:30' : return 'Canada/Newfoundland'; break;
case '+03:30' : return 'Asia/Tehran'; break;
case '+04:30' : return 'Asia/Kabul'; break;
case '+05:30' : return 'Asia/Kolkata'; break;
case '+05:45' : return 'Asia/Kathmandu'; break;
case '+09:30' : return 'Australia/Darwin'; break;
} …Run Code Online (Sandbox Code Playgroud) 我在数据库中有很多不同的显示时间,并希望通过创建偏移量来根据用户时区显示正确的时间.
我从GMT获得用户时区偏移并将其转换为小时数.
NSTimeZone.localTimeZone().secondsFromGMT / 60 / 60
Run Code Online (Sandbox Code Playgroud)
然后我需要找到一种方法来将日期对象添加到日期对象中......这就是我/我挣扎的地方.
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
let date = formatter.dateFromString(timeAsString)
println("date: \(date!)")
Run Code Online (Sandbox Code Playgroud)
然后我从标签中创建一个字符串,以便用AM/PM轻松读取.
formatter.dateFormat = "H:mm"
formatter.timeStyle = .ShortStyle
let formattedDateString = formatter.stringFromDate(date!)
println("formattedDateString: \(formattedDateString)")
Run Code Online (Sandbox Code Playgroud)
我似乎无法找出如何添加/减去小时数.我把弦分开了,但有时候会变成负面而且不起作用.也许我错了.
谢谢你的帮助.
基思
假设美国加州的用户选择了日期,时间和时区:
全球啤酒马拉松将于2013年8月15日上午10:00开始,UTC-08:00
中欧的另一个用户打开显示此日期和时间的页面.他不想做时间计算(已经喝了很少的啤酒).他只是想看看这个日期和时间:
2013年8月15日19:00
鉴于浏览器收到加州用户输入的日期和时间信息:
有没有办法在javascript中没有外部Web服务来进行正确的转换?也就是说,要检测到UTC时间上午10点UTC-08:00实际上应该是UTC-07:00上午10点,因为它是夏令时.
也许我从一开始就对此有了错误的理解,但我不想让进入的用户考虑是否应该选择UTC-08:00(太平洋标准时间)或UTC-07:00(PDT).我假设由于CA中的标准时区是PST,人们不会在夏天转向思考PDT.或者他们?!
在中欧,标准日期为UTC + 01:00,夏令时为UTC + 02:00.因此,CA和欧洲之间的差异应该是9小时,除了一年中的两个时段,当一个或另一个区域在标准和夏令时模式之间切换时.
更新:
经过一番思考和阅读评论后,我理想需要的是:
var utcOffset = f('2013-08-15T10:00', 'America/Los_Angeles');
// utcOffset == "-07:00"
var utcOffset = f('2013-11-15T10:00', 'America/Los_Angeles');
// utcOffset == "-08:00"
Run Code Online (Sandbox Code Playgroud)
到目前为止,看起来像Guido Preite建议的moment.js/timezone插件能够做到这一点(或多或少).
还有其他任何方式,使用浏览器API?
所以我有一个带注释功能的站点,其中注释的时间戳存储在MySQL数据库中.据我所知,时间戳在存储时转换为UTC,然后在检索时转换回默认时区.就我而言,我的服务器处于中央夏令时时区(CDT).
我计划通过报名表从每个用户获取时区.我只是想知道如何将TIMESTAMP值转换为用户的时区.
$userTimezone = new DateTimeZone($userSubmittedTimezoneString); $myDateTime = new DateTime($storedTimestamp, $userTimezone);
......还是不正确?
看起来很奇怪,但我找不到使用Python中的Pandas/pytz找到本地时区的简单方法.
我可以:
>>> pd.Timestamp('now', tz='utc').isoformat()
Out[47]: '2016-01-28T09:36:35.604000+00:00'
>>> pd.Timestamp('now').isoformat()
Out[48]: '2016-01-28T10:36:41.830000'
>>> pd.Timestamp('now').tz_localize('utc') - pd.Timestamp('now', tz='utc')
Out[49]: Timedelta('0 days 01:00:00')
Run Code Online (Sandbox Code Playgroud)
哪个会给我时区,但这可能不是最好的方法...在pytz或pandas中是否有命令来获取系统时区?(最好是在python 2.7中)
我不是php的专家.我知道PHP 支持时区.
对于PHP支持的给定时区TZ,我需要检索已知UTC(即GMT + 0)的偏移量(即,添加或减去的小时数和分钟数)以在TZ区域中获得该时间.
我怎样才能做到这一点?最终,我需要在PHP中为所有支持的时区获取这些偏移量.谢谢.
今天,我发现我的脚本来转换并显示奥尔森时区ID添加到城市和GMT偏移量是生产一些非常奇怪的结果:阿根廷区引起了我的注意,因为他们显示标准(非DST)时间基准的±0000日光节约/世界标准时间.
我检查了我的代码,我发现在我的逻辑个小bug,但它是不相关的差异,所以我更新timezonedb通过pecl为版本2012.8,但它仍然返回错误的偏移...
以下是一些代码,它返回对America/Argentina/San_Luis时区的最后3个更改:
$timezone = new DateTimeZone('America/Argentina/San_Luis');
$transitions = $timezone->getTransitions();
echo '<pre>';
print_r(array_slice($transitions, -3, null, true));
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
这是输出:
Array
(
[59] => Array
(
[ts] => 1223784000
[time] => 2008-10-12T04:00:00+0000
[offset] => -10800
[isdst] => 1
[abbr] => WARST
)
[60] => Array
(
[ts] => 1236481200
[time] => 2009-03-08T03:00:00+0000
[offset] => -14400
[isdst] =>
[abbr] => WART
)
[61] => Array
(
[ts] => 1255233600
[time] => 2009-10-11T04:00:00+0000
[offset] => …Run Code Online (Sandbox Code Playgroud) 我有一行设置单元格中的当前日期和时间:
sheet.getRange(1,1).setValue(new Date());
Run Code Online (Sandbox Code Playgroud)
然后我有一行根据该单元格的值创建格式化日期:
var addedDate = sheet.getRange(1,1).getValue();
var addedTime = Utilities.formatDate(addedDate, "GMT", "hh:mm a");
Run Code Online (Sandbox Code Playgroud)
结果addTime似乎在GMT时区,我需要它在用户的时区.它通常是美国东部时间(-0500),但如果我只是从那个时间减去5个小时,那么不考虑夏令时(-0400).
我在这里查看了formatDate的文档:https://developers.google.com/apps-script/reference/utilities/utilities#formatDate (Date,String,String )
这里链接到官方的Java SimpleDateFormat类文档:http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
...但我无法在那里找到有效时区列表来替换GMT.
在Java 8中,我想将日期时间从UTC转换为ACST(UTC + 9:30).
输入 - > 2014-09-14T17:00:00 + 00:00
output-> 2014-09-15 02:30:00
String isoDateTime = "2014-09-14T17:00:00+00:00";
LocalDateTime fromIsoDate = LocalDateTime.parse(isoDateTime, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
ZoneOffset offset = ZoneOffset.of("+09:30");
OffsetDateTime acst = OffsetDateTime.of(fromIsoDate, offset);
System.out.println(acst.toString()); // 2014-09-14T17:00+09:30
System.out.println(acst.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); // 2014-09-14T17:00:00+09:30
Run Code Online (Sandbox Code Playgroud)
为什么没有执行偏移?
我是Go新手,我正在努力格式化并显示一些IBM大型机TOD时钟数据.我想格式化GMT和本地时间的数据(作为默认值 - 否则在用户指定的区域中).
为此,我需要从GMT获取本地时间偏移的值作为有符号整数秒.
在zoneinfo.go(我承认我不完全理解),我可以看到
// A zone represents a single time zone such as CEST or CET.
type zone struct {
name string // abbreviated name, "CET"
offset int // seconds east of UTC
isDST bool // is this zone Daylight Savings Time?
}
Run Code Online (Sandbox Code Playgroud)
但我认为这不是导出的,所以这段代码不起作用:
package main
import ( "time"; "fmt" )
func main() {
l, _ := time.LoadLocation("Local")
fmt.Printf("%v\n", l.zone.offset)
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来获取这些信息?
timezone-offset ×10
timezone ×6
php ×4
datetime ×2
javascript ×2
date ×1
geolocation ×1
go ×1
java ×1
java-8 ×1
mysql ×1
pandas ×1
python ×1
python-2.7 ×1
pytz ×1
swift ×1
time ×1