我有这个日期时间,或类似的东西。
2014-11-17 23:02:03 +0000 UTC
我想将此转换为时间对象,除了time.Parse
之外,我还无法生成0001-01-01 00:00:00 +0000 UTC
的任何输出:
time.RFC3339
0001-01-01 00:00:00 0000 UTC
2016-10-10
time.UnixDate
我已尝试过这些布局:
parse
还有一些 - 没有人工作过。
这就是我调用updatedAt, err := time.Parse(time.UnixDate, updatedAtVar)
的方式:
class HashingTable
{
...
public:
/*
* Constructors
*/
// Default constructor
HashingTable();
// Default destructor
virtual ~HashingTable();
// Constructor requiring size of vector to create
HashingTable(int size);
// Copy constructor requiring another instance of HashingTable
explicit HashingTable(const HashingTable& ht);
}
// Copy constructor using another table instance
template <class obj_type>
HashingTable<obj_type>::HashingTable(const HashingTable& ht)
{
cout << "Copy constructor called" << endl;
*this = ht;
}
// Overload of operator=
template <class obj_type>
HashingTable<obj_type>& HashingTable<obj_type>::operator=(constHashingTable& ht)
{
cout << "In operator=..."
if (this != &ht) // no need to copy itself
{
// do some stuff to *this
}
return *this;
}
如何从字符串创建时间对象?
答案 0 :(得分:8)
您很可能使用了错误的布局,并且没有检查返回的错误。
布局必须是此日期/时间,格式为输入时间:
Mon Jan 2 15:04:05 -0700 MST 2006
请参阅此工作代码:
layout := "2006-01-02 15:04:05 -0700 MST"
t, err := time.Parse(layout, "2014-11-17 23:02:03 +0000 UTC")
fmt.Println(t, err)
输出(在Go Playground上尝试):
2014-11-17 23:02:03 +0000 UTC <nil>
修改强>
在您的问题中,您在输入时间中添加了+
符号(作为区域偏移的一部分),但是您有其他格式的错误。
Time.String()
使用以下格式字符串:
"2006-01-02 15:04:05.999999999 -0700 MST"
因此要么使用它来解析时间,要么使用Time.Format()
来生成字符串表示,您可以在其中指定布局,因此您可以使用相同的布局来解析时间字符串。
第二轮:
您在URL中包含时间字符串。 +
符号是URL编码中的特殊字符:它表示空格。所以+
被转换为空格(因此它会从你的时间字符串中消失)。使用正确的URL编码!查看net/url
包和this example。
答案 1 :(得分:1)
还没有看到这个,但是对于那些不知道格式的人,时间已经将其内置为常量。因此您可以在解析或格式化时引用它们。
time.Parse(time.RFC3339, <your time.Time object here>)
<time.Time object>.Format(time.RFC3339) //or other type of formats
在这里仅供参考
ANSIC = "Mon Jan _2 15:04:05 2006"
UnixDate = "Mon Jan _2 15:04:05 MST 2006"
RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
RFC822 = "02 Jan 06 15:04 MST"
RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen = "3:04PM"
答案 2 :(得分:0)
您可能使用了错误的布局。正如time.Parse
中所述,您需要指定一个布局,以帮助Go了解输入日期的格式化方式。
有预定义的布局(就像你使用的布局一样),但没有一个匹配你的输入。因此,您需要定义自定义布局。
布局使用以下日期作为参考:
Mon Jan 2 15:04:05 MST 2006
布局与该日期的表示形式无关,与输入的表示形式相匹配:
t, err := time.Parse("2006-01-02 15:04:05 -0700 MST", "2014-11-17 23:02:03 +0000 UTC")
另请记得检查err
是否有错误。您的尝试可能会返回错误,但您没有检查它。
package main
import (
"fmt"
"log"
"time"
)
func main() {
t, err := time.Parse("2006-01-02 15:04:05 -0700 UTC", "2014-11-17 23:02:03 +0000 UTC")
if err != nil {
log.Fatalln(err)
}
fmt.Println(t)
}