2

我有这个代码,但它失败了。为什么?

// 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;

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

4

3 回答 3

3

我建议为此目的使用该GLib.DateTime课程。

如果您希望当前日期作为区域设置相关或独立格式,您没有写。

取决于语言环境,使用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

我从您自己的答案中获取了自定义格式,但我不会使用它,因为它会造成混淆,因为通常带有/分隔日期的格式为"%m/%d/%Y""%m/%d/%y".

我更喜欢语言环境默认格式(这是用户所期望的)或ISO 8601格式,无论是否to_string ()使用format ("%F").

于 2014-09-29T09:44:11.393 回答
1

From the documentation:

If the Date-struct is obtained from g_date_new, it will be safe to mutate but invalid and thus not safe for calendrical computations.

Perhaps you want to set_time_t, or set_time_val. If you want today's date, fecha.set_time_t(time_t());

于 2014-09-27T10:36:53.353 回答
0

这段代码运行良好!!在 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()
于 2014-09-28T12:37:31.853 回答