这是我的代码:
import datetime
today = datetime.date.today()
print(today)
这打印:2008-11-22 这正是我想要的。
但是,我有一个要附加的列表,然后突然间一切都变得“不稳定”。代码如下:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)
这将打印以下内容:
[datetime.date(2008, 11, 22)]
我怎样才能得到像 2008-11-22 这样的简单日期?
最佳答案
在 Python 中,日期是对象。因此,当您操作它们时,您操作的是对象,而不是字符串或时间戳。
Python 中的任何对象都有两种字符串表示形式:
print 使用的正则表示可以使用str() 函数获得。大多数情况下,它是最常见的人类可读格式,用于简化显示。所以 str(datetime.datetime(2008, 11, 22, 19, 53, 42)) 给你 '2008-11-22 19:53:42'。
用于表示对象性质(作为数据)的替代表示。它可以使用 repr() 函数获得,并且可以方便地了解您在开发或调试时操作的数据类型。 repr(datetime.datetime(2008, 11, 22, 19, 53, 42)) 给你'datetime.datetime(2008, 11, 22, 19, 53, 42)'。
发生的情况是,当您使用 print 打印日期时,它使用了 str(),因此您可以看到一个漂亮的日期字符串。但是当你打印 mylist 时,你已经打印了一个对象列表,Python 尝试使用 repr() 来表示数据集。
好吧,当您操作日期时,请一直使用日期对象。他们获得了数千种有用的方法,并且大多数 Python API 都希望日期是对象。
当你想显示它们时,只需使用 str()。在 Python 中,好的做法是显式转换所有内容。因此,当需要打印时,使用 str(date) 获取日期的字符串表示形式。
最后一件事。当您尝试打印日期时,您打印了 mylist。如果要打印日期,则必须打印日期对象,而不是它们的容器(列表)。
E.G,你想打印列表中的所有日期:
for date in mylist :
print str(date)
请注意,在特定情况下,您甚至可以省略 str(),因为 print 会为您使用它。但它不应该成为一种习惯:-)
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
日期具有默认表示,但您可能希望以特定格式打印它们。在这种情况下,您可以使用 strftime() 方法获得自定义字符串表示。
strftime() 需要一个字符串模式来解释您希望如何格式化您的日期。
E.G:
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
"%" 后面的所有字母都代表某种格式:
%d 是天数(2 位数字,必要时以前导零作为前缀)%m 是月份编号(2 位数字,必要时以前导零作为前缀)%b 是月份的缩写(3 个字母)%B 是完整的月份名称(字母)%y 是年份数字的缩写(最后 2 位数字)%Y 是完整的年份数字(4 位数字)等等
Have a look at the official documentation , 或 McCutchen's quick reference你不可能全都知道。
自从 PEP3101 ,每个对象都可以有自己的格式,由任何字符串的方法格式自动使用。在日期时间的情况下,格式与 时间。所以你可以像上面一样做:
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
这种形式的好处是还可以同时转换其他对象。
随着Formatted string literals的介绍(自 Python 3.6,2016-12-23 起)这可以写成
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
如果您以正确的方式使用日期,日期可以自动适应本地的语言和文化,但这有点复杂。也许关于 SO(Stack Overflow) 的另一个问题 ;-)
关于python - 如何以常规范式打印日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/311627/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
为什么以下不同?Time.now.end_of_day==Time.now.end_of_day-0.days#falseTime.now.end_of_day.to_s==Time.now.end_of_day-0.days.to_s#true 最佳答案 因为纳秒数不同:ruby-1.9.2-p180:014>(Time.now.end_of_day-0.days).nsec=>999999000ruby-1.9.2-p180:015>Time.now.end_of_day.nsec=>999999998