如何得到今天的一天,并使用vala/genie将其转换为字符串?

问题描述:

我有这个代码,但它失败。为什么?如何得到今天的一天,并使用vala/genie将其转换为字符串?

// tomar la fecha 
fecha = GLib.Date(); 
print "cogiendo" 
var s = new StringBuilder("Fecha:"); 
dia:DateDay= fecha.get_day(); 
s.append_printf ("%u",dia); 
print s.str; 
fecha_str=s.str; 

油嘴返回: g_date_get_day:断言 'g_date_valid(d)' 失败

+0

对不起,我想采取当前日期,今天的日期。 – txasatonga 2014-09-28 12:29:35

我建议使用GLib.DateTime class来达到此目的。

如果您希望将当前日期作为区域设置相关或独立格式,则不会写入。

区域设置依赖,使用format()

var dt = new DateTime.now_local(); 
stdout.puts (dt.format ("%x")); 

区域设置独立的,使用to_string()(注意,这也将包括时间):

var dt = new DateTime.now_local(); 
stdout.puts (@"$dt"); 

在自定义格式使用format()

var dt = new DateTime.now_local(); 
stdout.puts (dt.format ("%d/%m/%Y")); // 29/09/2014 

我把自定义的fo rmat从你自己的答案,但我不会使用它,因为它很混乱,因为通常与/分隔日期格式"%m/%d/%Y""%m/%d/%y"

我宁愿无论是本地默认格式(这是用户期望的内容)或ISO 8601格式,你to_string()或不与format ("%F")的时候得到的。

从文档:

如果日期-结构从g_date_new获得,这将是安全的变异但无效,因此对于日历计算不安全。

也许你想要set_time_tset_time_val。如果你想今天的日期,fecha.set_time_t(time_t());

+0

谢谢,但问题出在了错误的位置。 – txasatonga 2014-09-28 12:37:03

这段代码顺利!在gnome的vala样本中搜索:

var now = new DateTime.now_local(); 
fecha_str = now.get_day_of_month().to_string()+"/"+now.get_month().to_string()+"/"+now.get_year().to_string() 
+1

更好地使用'DateTime.format()',看我的答案。 – 2014-09-29 09:45:45