使用React Native获取时区

Get the time zone with React Native

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

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


我发现最好获取实际的时区ID(例如America/New_York),然后将服务器程序设置为在开始时使用该时区。为此,请使用react-native-device-info库:https://www.npmjs.com/package/react-native-device-info

1
2
3
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


你可以在浏览器上用JavaScript做任何事情(当然除外),你可以在React Native中做。我将启动一个新的日期对象并在其上调用getTimezoneOffset()以获取时区在本地偏移的分钟数。

1
2
var date = new Date();
var offsetInHours = date.getTimezoneOffset() / 60;


我建议不要使用偏移,因为它不能满足夏令时或操作系统可以进行的任何其他调整。

而是让JavaScript为您进行UTC转换。此SO答案显示了一个示例:使用JavaScript将UTC日期时间转换为本地日期时间

如果你需要转换为任意时区,你应该看看使用像moment.js这样的库,原因与我上面提到的相同。


如果使用Expo构建项目,则可以使用Localization对象。

进口:

1
import { Localization } from 'expo';

使用:

1
console.log(Localization.timezone)

它将以显示格式返回当前时区,例如America/Los_Angeles