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

.NET Core 6.0.18 Web API部署IIS 10遇ORA-01882时区错误求助

解决ORA-01882时区区域未找到问题的方案

1. 环境变量TZ配置方案

开发环境(launchSettings.json)

在项目的launchSettings.json中,给对应运行配置添加TZ环境变量,指定目标时区:

"profiles": {
  "IIS Express": {
    "commandName": "IISExpress",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development",
      "TZ": "America/Phoenix"
    }
  },
  "YourApiProject": {
    "commandName": "Project",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development",
      "TZ": "America/Phoenix"
    }
  }
}

生产IIS服务器配置

自包含发布的应用无法通过appsettings.json设置系统级环境变量,需在IIS中直接配置:

  • 打开IIS管理器,找到目标站点,右键选择配置编辑器
  • 定位到system.webServer/aspNetCore节点(选择站点级配置)
  • 在environmentVariables集合中新增项:名称填TZ,值填America/Phoenix
  • 保存配置后重启站点

2. 代码层面指定时区(提前配置而非连接后)

方式一:修改连接字符串

在连接字符串中直接追加时区参数,无需额外代码:

string connString = "Data Source=YourOracleDB;User Id=xxx;Password=xxx;Session Time Zone=America/Phoenix;";

方式二:通过OracleGlobalization全局配置

在打开连接前先设置线程级时区信息,避免连接时触发递归SQL错误:

using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;

// 先设置客户端时区
var clientGlobalization = OracleGlobalization.GetClientInfo();
clientGlobalization.TimeZone = "America/Phoenix";
OracleGlobalization.SetThreadInfo(clientGlobalization);

// 再初始化并打开连接
using (var conn = new OracleConnection(connString))
{
    conn.Open();
    // 执行数据库操作
}

3. 兼容Oracle 11g旧时区数据的替代方案

Oracle 11g的时区数据可能未包含America/Phoenix的完整别名,可直接使用UTC偏移量替代:

  • 连接字符串中改为Session Time Zone=UTC-7
  • 或代码中设置clientGlobalization.TimeZone = "UTC-7"

关键说明

本地IIS Express运行正常是因为开发机器的系统时区或环境变量已包含正确配置,而服务器缺少该设置;自包含发布的.NET Core应用不会自动继承服务器系统时区,必须显式指定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:27:45