You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native如何获取带时区的当前日期和时间?

获取React Native中指定时区(it-IT)的日期时间

嘿,我完全懂你遇到的困扰——new Date()和普通moment返回的都是UTC时间(就是带Z后缀的格式),而你需要的是符合it-IT时区(欧洲罗马时区,夏令时期间UTC+2)的本地时间对吧?下面给你几个实用的解决方案:

方案1:原生JavaScript API(无需第三方库)

其实new Date()实例本身是包含时区信息的,只是默认的toISOString()方法会输出UTC时间。你可以用Intl.DateTimeFormat来指定时区并格式化:

直接生成本地化格式字符串

const today = new Date();
// 生成it-IT时区的日期时间字符串,格式可自定义
const localDateTime = today.toLocaleString('it-IT', {
  timeZone: 'Europe/Rome', // 指定目标时区
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  fractionalSecondDigits: 3 // 保留毫秒
});
console.log(localDateTime); // 示例输出:"30/03/2022, 15:13:04,154"

生成类似ISO的格式(如你需要的YYYY-MM-DDTHH:mm:ss.SSS)

如果想要和原格式接近的ISO风格字符串,可以用formatToParts方法拆分后拼接:

const today = new Date();
const parts = new Intl.DateTimeFormat('it-IT', {
  timeZone: 'Europe/Rome',
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  fractionalSecondDigits: 3
}).formatToParts(today);

// 拼接成目标格式
const isoStyleTime = `${parts.find(p => p.type === 'year').value}-${parts.find(p => p.type === 'month').value}-${parts.find(p => p.type === 'day').value}T${parts.find(p => p.type === 'hour').value}:${parts.find(p => p.type === 'minute').value}:${parts.find(p => p.type === 'second').value}.${parts.find(p => p.type === 'fractionalSecond').value}`;
console.log(isoStyleTime); // 输出:"2022-03-30T15:13:04.154"

方案2:使用moment-timezone(moment的时区扩展)

普通的moment库默认只会处理UTC或设备本地时区,要指定特定时区得用moment-timezone:

  1. 先安装依赖:
npm install moment-timezone --save
# 或者用yarn
yarn add moment-timezone
  1. 代码中使用:
import moment from 'moment-timezone';

// 直接指定时区并格式化
const localTime = moment().tz('Europe/Rome').format('YYYY-MM-DDTHH:mm:ss.SSS');
console.log(localTime); // 输出:"2022-03-30T15:13:04.154"

这个方法的好处是会自动处理夏令时切换,不用手动调整偏移量,非常省心。

方案3:使用date-fns-tz(轻量替代方案)

如果你不想引入moment这种体积较大的库,date-fns搭配date-fns-tz是个更轻量化的选择:

  1. 安装依赖:
npm install date-fns date-fns-tz --save
  1. 代码中使用:
import { format } from 'date-fns';
import { utcToZonedTime } from 'date-fns-tz';

const targetTimeZone = 'Europe/Rome';
// 将UTC时间转换为目标时区的时间对象
const zonedDate = utcToZonedTime(new Date(), targetTimeZone);
// 格式化输出
const formattedDate = format(zonedDate, "yyyy-MM-dd'T'HH:mm:ss.SSS", { timeZone: targetTimeZone });
console.log(formattedDate); // 输出:"2022-03-30T15:13:04.154"

最后补充一句:之前你用普通moment得到UTC时间,大概率是调用了toISOString()方法——这个方法不管什么时区都会返回UTC时间,而如果用moment().format()但设备时区不是it-IT的话,也会得到错误的本地时间,所以一定要用时区扩展库来强制指定目标时区哦。

内容的提问来源于stack exchange,提问作者Jack23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:32:31