使用React Native获取时区

Tha*_*yen 18 react-native

我想获得手机用户的时区,这样我可以添加或者到.减去与UTC时间,我从我的API获得,然后就这些操作(通知,例如).

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

use*_*145 47

我发现最好获取实际的时区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'
Run Code Online (Sandbox Code Playgroud)

如果在编译期间收到有关'tvOS'的错误,请参阅此修复程序:https://github.com/rebeccahughes/react-native-device-info/issues/286

  • 自 3.0.0 版本起不再工作。检查这个:https://github.com/react-native-community/react-native-localize#gettimezone (10认同)
  • 此方法在最新版本的react-native-device-info中已弃用。并且不再存在于文档中。相关公关:https://github.com/react-native-community/react-native-localize/pull/65 (4认同)
  • 这应该是正确答案:) (2认同)

Bra*_*ugh 14

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

var date = new Date();
var offsetInHours = date.getTimezoneOffset() / 60;
Run Code Online (Sandbox Code Playgroud)

  • 这不能正常工作。我在 UTC-3 中,这个脚本只返回 3。我猜不出是 UTC+3 还是 UTC-3。 (3认同)
  • 该函数不准确,因为它没有考虑 DST (2认同)

小智 11

为了在 React Native(或在网络上)中获取时区,我使用以下命令:

Intl.DateTimeFormat().resolvedOptions().timeZone
Run Code Online (Sandbox Code Playgroud)

它返回类似:“America/Los_Angeles”

  • 有适用于 Android 的等效程序吗?Intl 对我来说也只适用于 iOS。 (4认同)
  • [未处理的承诺拒绝:ReferenceError:找不到变量:Intl] (3认同)
  • 要在 Android 上启用,您需要取消注释“app/build.gradle”文件的一部分。我的是第 109 行。具体来说是 `def jscFlavor = 'org.webkit:android-jsc-intl:+'` (2认同)

Ric*_*lay 7

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

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

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


Dan*_*Dan 7

我还需要在我的 React Native App 中获取时区。但是我需要以 IANA 格式而不是偏移量获取时区。

上面建议的库"react-native-device-info"不推荐使用 timeZone 方法,因此我不得不搜索更新的替代方案。

我正在使用 expo 并且在使用“react-intl”库时遇到了问题,但我发现了两个可以完成这项工作的库:

  1. 如果您使用“”反应原生:
console.log(RNLocalize.getTimeZone());
// -> "Europe/Paris" 

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

Run Code Online (Sandbox Code Playgroud)


小智 5

如果使用Expo构建项目,则可以使用Localizationobject。

进口:

import { Localization } from 'expo';
Run Code Online (Sandbox Code Playgroud)

使用:

console.log(Localization.timezone)
Run Code Online (Sandbox Code Playgroud)

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

  • 目前是 `import * as Localization from 'expo-localization';` (2认同)