我想获取手机用户的时区,以便我可以将其添加或减去我从API获得的UTC时间,然后对它们进行操作(例如,用于通知)。
我只找到了如何使用DatePickerIOS添加偏移量,但没有别的......是否可以从前面获取它?
答案 0 :(得分:30)
我发现最好获取实际的时区ID(例如America/New_York
),然后将服务器程序设置为在开始时使用该时区。为此,请使用react-native-device-info库:https://www.npmjs.com/package/react-native-device-info
import DeviceInfo from 'react-native-device-info';
console.log(DeviceInfo.getTimezone()); // 'America/New_York'
如果您在编译期间收到有关'tvOS'的错误,请参阅此修复程序:https://github.com/rebeccahughes/react-native-device-info/issues/286
答案 1 :(得分:13)
你可以在浏览器上用JavaScript做任何事情(当然除外),你可以在React Native中做。我会发起一个新的日期对象,并在其上调用getTimezoneOffset()
以获得时区在本地偏移的分钟数。
var date = new Date();
var offsetInHours = date.getTimezoneOffset() / 60;
答案 2 :(得分:7)
我建议不要使用偏移,因为它不能满足夏令时或操作系统可以进行的任何其他调整。
而是让JavaScript为您进行UTC转换。这个SO答案显示了一个例子:Convert UTC date time to local date time using JavaScript
如果您需要转换为任意时区,您应该使用像moment.js这样的库,原因与上面提到的相同。
答案 3 :(得分:2)
如果使用Expo构建项目,则可以使用Localization
对象。
导入:
import { Localization } from 'expo';
使用:
console.log(Localization.timezone)
它将以显示格式返回当前时区,例如America/Los_Angeles
。
答案 4 :(得分:2)
我还需要在React Native App中获取时区。但是我需要获取IANA格式而不是偏移量的时区。
“ react-native-device-info” 上方建议的库不建议使用timeZone方法,因此我必须搜索更新的替代方法。
我正在使用expo,但是在使用“ react-intl”库时遇到了问题,但是我发现有两个库可以完成此工作:
“ react-native-localize”库是一个不错的选择。
console.log(RNLocalize.getTimeZone());
// -> "Europe/Paris"
console.log(Localization.timezone);
// -> "Europe/Paris"
答案 5 :(得分:0)
要在React Native(或在网络上)中获取时区,我使用以下方法:
Intl.DateTimeFormat().resolvedOptions().timeZone
返回类似“ America / Los_Angeles”的内容