使用React Native获取时区

时间:2016-05-31 18:21:02

标签: react-native

我想获取手机用户的时区,以便我可以将其添加或减去我从API获得的UTC时间,然后对它们进行操作(例如,用于通知)。

我只找到了如何使用DatePickerIOS添加偏移量,但没有别的......是否可以从前面获取它?

6 个答案:

答案 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”库时遇到了问题,但是我发现有两个库可以完成此工作:

  1. 如果您使用的是“ ”,请使用本机响应:
console.log(RNLocalize.getTimeZone());
// -> "Europe/Paris" 

  1. 如果您正在使用 expo
 console.log(Localization.timezone);
// -> "Europe/Paris" 

答案 5 :(得分:0)

要在React Native(或在网络上)中获取时区,我使用以下方法:

Intl.DateTimeFormat().resolvedOptions().timeZone

返回类似“ America / Los_Angeles”的内容