Utilities.Formatdate结果不会更改

时间:2016-10-06 08:52:23

标签: google-apps-script google-sheets formatdatetime

这让我疯了,但它必须简单: - )

我在电子表格上运行了一个Google脚本,我想输入一个包含当前日期的字符串(例如“制作时间:2016年10月6日@ 18:10”)。

我正在使用的测试代码和下面的示例Logger.log。

我的问题是,无论实际时间如何,Utilities.Formatdate的结果总是返回相同的值。

任何想法的家伙? TIA :-) 干杯 ...史蒂夫

function TEST() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell=sheet.getRange("A1");

Logger.log(new Date());
  var nowdate = new Date();
Logger.log (nowdate);
  var nowdatestr = ("Produced at: " +Utilities.formatDate(nowdate, "GMT+10", "dd MMM YYYY @ HH:MM"));
Logger.log (nowdatestr);
//  cell.setValue(nowdatestr);
Logger.log (Utilities.formatDate(new Date(), "GMT+10", "dd MMM YYYY @ HH:MM"));
Logger.log (cell.getValues());
Logger.log(new Date());

}

记录结果:

[16-10-06 18:46:58:022 AEST] Thu Oct 06 18:46:58 GMT+10:00 2016
[16-10-06 18:46:58:022 AEST] Thu Oct 06 18:46:58 GMT+10:00 2016
[16-10-06 18:46:58:024 AEST] Produced at: 06 Oct 2016 @ 18:10
[16-10-06 18:46:58:024 AEST] 06 Oct 2016 @ 18:10
[16-10-06 18:46:58:081 AEST] [[Title]]
[16-10-06 18:46:58:082 AEST] Thu Oct 06 18:46:58 GMT+10:00 201

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@Vytautas: 您的整理版本省略了当前实际日期的日志,然后显示我遇到的问题。

所以使用:

function TEST2() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell=sheet.getRange("A1");

var nowdate = new Date()
var nowdatestr = ("Produced at: " + Utilities.formatDate(nowdate, 'GMT+10', 'dd MMM YYYY @ HH:MM'));
Logger.log (nowdatestr);
cell.setValue(nowdatestr);
Logger.log ("real new date and time is: " +new Date());
Logger.log (cell.getValues())
}

提供日志:

[16-10-07 12:31:57:265 AEST] Produced at: 07 Oct 2016 @ 12:10
[16-10-07 12:31:57:315 AEST] real new date and time is: Fri Oct 07 2016 12:31:57 GMT+1000 (AEST)
[16-10-07 12:31:57:448 AEST] [[Produced at: 07 Oct 2016 @ 12:10]]

@Ruben: 在每次新的Date()调用之前插入Utilities.sleep(1000)没有任何区别。

也许这不像我最初想的那么简单......: - )

++++++++++++++++++

最终工作测试代码(感谢Ruben)是(将HH:MM改为HH:mm):

function TEST2() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell=sheet.getRange("A1");

var nowdate = new Date()
var nowdatestr = ("Produced at: " + Utilities.formatDate(nowdate, 'GMT+10', 'dd MMM YYYY @ HH:mm'));
Logger.log (nowdatestr);
cell.setValue(nowdatestr);
Logger.log ("real new date and time is: " +new Date());
Logger.log (cell.getValues())
}

谢谢!

2 个答案:

答案 0 :(得分:1)

简短回答

而不是HH:MM使用HH:mm

解释

根据http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  • M代表几个月。
  • m代表分钟。

实施例

function myFunction() {
  // General variables
  var stringTimeZone = 'GMT-0500';
  var stringFormat = 'dd MMM YYYY @ HH:mm'; // Use m for minutes, M for months
  // Main code
  var dateOne = new Date(); // First date instance
  var stringOne = Utilities.formatDate(dateOne, stringTimeZone , stringFormat);
  Logger.log(stringOne);
  Utilities.sleep(1000*60); // Wait one minute in order to force different date-times
  var dateTwo = new Date(); // Seconde date instance
  var stringTwo = Utilities.formatDate(dateTwo, stringTimeZone, stringFormat);
  Logger.log(stringTwo);
}

当我运行上面的脚本时,生成的日志如下:

[16-10-06 20:43:38:717 PDT] 06 Oct 2016 @ 22:43
[16-10-06 20:44:38:750 PDT] 06 Oct 2016 @ 22:44

答案 1 :(得分:0)

此代码正常运行。清理它以便我们不会得到一堆没有告诉我们任何东西的垃圾日志。

function TEST() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell=sheet.getRange("A1");

var nowdate = new Date()
var nowdatestr = ("Produced at: " + Utilities.formatDate(nowdate, 'GMT+10', 'dd MMM YYYY @ HH:MM'));
Logger.log (nowdatestr);
cell.setValue(nowdatestr);

Logger.log (cell.getValues())
}

enter image description here