为什么我的Azure Function App时间戳要少一小时

时间:2018-09-26 19:39:14

标签: c# azure azure-functions

我有一个每五分钟运行一次的Azure Function应用。该文档的时间戳字段使用

DateTime.Now

我住在英国,目前英国夏令时为18年9月26日,比格林尼治标准时间早1小时。我的Azure数据中心在英国南部。时间戳错误了一个小时。例如。 20:01以19:01的形式存储在文档中。我该如何纠正?

3 个答案:

答案 0 :(得分:3)

无服务器代码的想法是抽象出代码实际运行的位置。因此,Azure函数默认为UTC时间。您可以通过添加WEBSITE_TIME_ZONE作为应用程序的本地时间来设置本地时区。参见Can I set specific time zone to Azure Functions app?

答案 1 :(得分:1)

您可以在代码中处理此问题,对于英国,您可以使用以下代码,这些代码应会根据夏时制自动进行调整。

import java.util.*;
/**
  */
public class sacDemo
{
public static void main(String[] args)
{
    Scanner input = new Scanner(System.in); //Creates new scanner object.
    sac sac = new sac(); //Creates accessor object to retrieve variables       from sac class.

    int bal;
    double air;
    double[] dep = new double[5];;
    double[] wit = new double[7];

    double[] d = dep;
    double[] w = wit;

    w = sac.getWit();
    d = sac.getDep();

    System.out.println("What is your annual interest rate?");
    air = input.nextInt();
    air = air/10;

    System.out.println("Your deposits for the month were: ");
    for(int i=0;i<5;i++){

        System.out.println(dep[i]);
    }
    System.out.println("Your withdrawals for the month were: ");
    for(int i=0;i<6;i++){

        System.out.println(wit[i]);
    }

}
}

在1月1日,TimeZoneInfo ukTimeZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); DateTime utcDate = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc); DateTime ukTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, ukTimeZone); Console.WriteLine(utcDate == ukTime); 的值应等于ukTime,因为一年中英国当时使用的时区是UTC时区,等于GMT

GMT


6月1日,英国时间应该比UTC早一个小时,因为英国将在一年中的那个时间切换到UTC时区。

BST

BST

答案 2 :(得分:1)

Azure功能默认情况下为UTC。

  • 对于 Windows ,添加设置 WEBSITE_TIME_ZONE 并将值设置为TimeZone
    • 例如: WEBSITE_TIME_ZONE = GMT标准时间
  • 对于 Linux ,添加设置 TZ 并将其设置为您的时区
    • 例如: TZ =欧洲/里斯本

对于 Windows ,TimeZone值检查here
对于 Linux 的TimeZone值,请检查here