Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jdbc 使用getScriptTimeZone的Google脚本formatDate问题_Jdbc_Google Apps Script_Formatdatetime - Fatal编程技术网

Jdbc 使用getScriptTimeZone的Google脚本formatDate问题

Jdbc 使用getScriptTimeZone的Google脚本formatDate问题,jdbc,google-apps-script,formatdatetime,Jdbc,Google Apps Script,Formatdatetime,我正在使用Google脚本在Web应用程序中使用JDBC数据。它从数据库中提取数据,然后以html格式显示。我认为使用Utilities.formatDate将jdbc结果日期转换为格式化字符串是可行的 在我的Code.gs文件中,我使用: var e_result = SQLstatement.executeQuery("select * from events..."); var resultsArray = []; while(e_result.next()) { resultsArr

我正在使用Google脚本在Web应用程序中使用JDBC数据。它从数据库中提取数据,然后以html格式显示。我认为使用Utilities.formatDate将jdbc结果日期转换为格式化字符串是可行的

在我的Code.gs文件中,我使用:

var e_result = SQLstatement.executeQuery("select * from events...");
var resultsArray = [];
while(e_result.next()) {
  resultsArray.push({'start_dte': Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd")}); 
  // test formatDate
  Logger.log("pre format date="+e_result.getString('start_dte'));
  Logger.log("post format date="+Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd"));
}
[15-08-21 04:32:50:580 PDT] pre format date=2015-07-23 00:00:00.0
[15-08-21 04:32:50:581 PDT] post format date=Dec 31
[15-08-21 12:46:20:285 PDT] Aug-06-2015
此输出到记录器:

var e_result = SQLstatement.executeQuery("select * from events...");
var resultsArray = [];
while(e_result.next()) {
  resultsArray.push({'start_dte': Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd")}); 
  // test formatDate
  Logger.log("pre format date="+e_result.getString('start_dte'));
  Logger.log("post format date="+Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd"));
}
[15-08-21 04:32:50:580 PDT] pre format date=2015-07-23 00:00:00.0
[15-08-21 04:32:50:581 PDT] post format date=Dec 31
[15-08-21 12:46:20:285 PDT] Aug-06-2015
预格式化日期是数据库中找到的正确日期。但是formatDate代码没有给出相同的日期字符串


我使用了“GMT-08:00”,结果与上面的“发布格式日期”完全相同(认为这是一个时区问题)。我遗漏了什么???

格式后日期返回为12月31日的原因是,如果将错误的日期或格式错误的日期传递给
date()
函数,它将返回
Wed Dec 31 1969 00:00:00
的值。您的“start_dte”值需要采用特定的格式才能传递给Date()函数,这样才能正确解析它,从而将其转换为所需的格式。下面是一个小样本,可以更清楚地说明这一点:

function testDate(){

  var start = "Aug 7 2015 00:00:00 GMT+0100";
  var testDate = Utilities.formatDate(new Date(start), "GMT-08:00", "MMM-dd-yyyy");

  Logger.log(testDate);
}
输出:

var e_result = SQLstatement.executeQuery("select * from events...");
var resultsArray = [];
while(e_result.next()) {
  resultsArray.push({'start_dte': Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd")}); 
  // test formatDate
  Logger.log("pre format date="+e_result.getString('start_dte'));
  Logger.log("post format date="+Utilities.formatDate(new Date(e_result.getString('start_dte')), Session.getScriptTimeZone(), "MMM dd"));
}
[15-08-21 04:32:50:580 PDT] pre format date=2015-07-23 00:00:00.0
[15-08-21 04:32:50:581 PDT] post format date=Dec 31
[15-08-21 12:46:20:285 PDT] Aug-06-2015

启动
也可以是2015年8月7日00:00:00,它可以工作。但是,只要传递了
Date()
函数不期望的格式的值,它就会返回
1969年12月31日的值。因此,我2015-07-23 00:00:00.0的数据库结果需要格式化为MM dd yyyy for date()才能理解它?我将研究Utilities.formatDate(String…)作为获取date()正确格式的一种方法。我发现在SQL中转换最容易。例如,“选择日期格式(events.start\u dte,'%Y-%m-%d')作为开始日期…”。然后结果是一个字符串,e_result.getString('start_dte'),它不需要formatDate或Date。谢谢你,点击。