当我在java和javascript中将日期转换为utc格式时,输出是不同的

Output are different when i convert date to utc format in java and javascript

本文关键字:格式 utc 是不同 输出 转换 日期 java javascript      更新时间:2023-09-26

Java代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String aDateString = "1993-06-15 09:35:00";
Date date = sdf.parse(aDateString);
System.out.println("reference date:"+date.getTime());
long dtDate1=Date.UTC(1993,06,15,9,35,00);
System.out.println(dtDate1);

Javascript代码:

<script>
function myFunction()
{
var d = Date.UTC(1993,06,15,09,35,00,00);  
var x = document.getElementById("demo");
x.innerHTML=d;
}
</script>

当我使用java代码将日期转换为UTC格式时,它会给我以下输出:

reference date:727070700000
60700959300000

当我使用javascript代码将日期转换为UTC格式时,它会给我以下输出:

742728900000

为什么两个输出都不一样?请给我在java和javascript中转换UTC格式的日期的解决方案,以便两者的输出相似。

Date.UTC不推荐使用,请尝试如下操作:

Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
cal.set(1993, 6, 15, 9, 35, 0);
long dtDate2 = cal.getTimeInMillis();
System.out.println(dtDate2);

如果你真的想使用Date。那么你必须意识到年份部分是从1900年开始的,因此你需要使用以下命令:

Date.UTC(1993 - 1900, 06, 15, 9, 35, 00);

在Java API中为Date指定:

年份y用整数y - 1900表示。

来源:Date (Java Platform SE 6)

下面是一个工作的java代码片段,它给出了一个合理的UTC时间值(使用已弃用的Date.UTC(int,int,int,int,int,int,int)方法)。还要注意,month是从0开始的,所以5 = June(我认为javascript也是如此)。

   public static void main(String[] args) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String aDateString = "1993-06-15 09:35:00";
        Date date = sdf.parse(aDateString);
        System.out.println("reference date:"+date.getTime());
        long dtDate1= Date.UTC(93, 05, 15, 9, 35, 00);
        System.out.println(dtDate1);
        long diff = (dtDate1 - date.getTime())/3600000;
        System.out.println("hours diff =" + diff );
    }

输出如下:

引用日期:740154900000

740136900000

hours diff =-5