有没有办法使用nodejs从系统中获取本地时区(例如: - ubuntu)?
我使用moment.js来提取日期和时间值。但是也无法找到提取时区的方法。
答案 0 :(得分:12)
现有的答案将告诉您当前的时区偏移,但如果您要比较历史/未来时间点,则会遇到问题,因为这不符合夏令时的变化。
在许多时区中,偏移量在一年中变化,这些变化发生在不同日期或根本不发生,具体取决于纬度。如果您只有UTC时间和偏移量,那么在一年中的其他不同时间,您永远无法确定该位置的偏移量。
例如,UTC + 2:00偏移量可以指夏季或象牙海岸全年的巴塞罗那。 2小时的偏移量将始终显示在象牙海岸的正确时间,但在巴塞罗那的半年内将持续1小时。
Check out this article covering the above.
我们如何迎合所有这些时区问题?嗯,这很简单:
在现代浏览器中,您可以获取如下的本地IANA时区字符串:
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.setPackage("com.google.android.gm");
String shareBody = "Here is the share content body";
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
startActivity(sharingIntent);
然后,您可以在Luxon等库中使用此时区字符串来帮助抵消捕获的UTC时间。
Intl.DateTimeFormat().resolvedOptions().timeZone // eg. 'America/Chicago'
答案 1 :(得分:4)
这很简单。
var x = new Date();
var offset= -x.getTimezoneOffset();
console.log((offset>=0?"+":"-")+parseInt(offset/60)+":"+offset%60)
没有别的,或者你可以看到 momentJS 是否可以帮到你。
答案 2 :(得分:3)
console.log("test ...")
let d = new Date()
console.log("UTC time " + d)
let ank = d.toLocaleString('en-US', { timeZone: 'America/Anchorage' });
console.log("your time zone " + ank)
ls /usr/share/zoneinfo
无论夏令时问题等如何,您都会获得正确的时间文本。
在几乎所有服务器上,mysql 也需要知道 tz 信息。
基本上解决方案是,在外壳上
sudo mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
...谷歌更多关于它。
答案 3 :(得分:0)
您可以使用Luxon 请参阅此处:https://moment.github.io/luxon/docs/manual/tour.html
设置:npm install luxon
var { DateTime } = require('luxon');
let d = DateTime.local();
console.log(d.zoneName); //Asia/Saigon
答案 4 :(得分:-2)
我使用moment.js(http://momentjs.com/docs/)
解决了这个问题var moment = require('moment');
var offset = moment().utcOffset();
console.log(''.concat(offset < 0 ? "-" : "+",moment(''.concat(Math.abs(offset/60),Math.abs(offset%60) < 10 ? "0" : "",Math.abs(offset%60)),"hmm").format("HH:mm")));
------ --------已编辑
我使用moment.js
找到了更好的解决方案。只需使用moment().format('Z')
给出输出:
05:30