Python中可以表示的最早时间是多少?

时间:2009-08-21 08:37:28

标签: python python-3.x

我编写了一个函数comp(time1, time2),当True小于time1时,该函数将返回time2。我的情况是time1应始终小于time2。我需要time1具有尽可能小的价值(即代表最早可能的时刻)。我怎么能得到这个时间?

5 个答案:

答案 0 :(得分:57)

如果使用datetime模块,则datetimedatetime个对象都具有minmax属性。

>>> from datetime import date, time, datetime
>>> date.min
datetime.date(1, 1, 1)
>>> date.max
datetime.date(9999, 12, 31)
>>> time.min
datetime.time(0, 0)
>>> time.max
datetime.time(23, 59, 59, 999999)
>>> datetime.min
datetime.datetime(1, 1, 1, 0, 0)
>>> datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)

答案 1 :(得分:13)

在python中,datetime对象导出以下常量

datetime.MINYEAR
The smallest year number allowed in a date or datetime object. MINYEAR is 1.

datetime.MAXYEAR
The largest year number allowed in a date or datetime object. MAXYEAR is 9999.

http://docs.python.org/library/datetime.html

答案 2 :(得分:4)

如果您使用的是标准问题unix时间戳值,那么最早可表示的时刻可以追溯到1970年:

>>> import time
>>> time.gmtime(0)
(1970, 1, 1, 0, 0, 0, 3, 1, 0)

答案 3 :(得分:4)

datetime模块中的某些功能会服从datetime.MINYEARdatetime.MAXYEAR,并会针对该范围之外的日期提出ValueException。它们分别分配给1和9999。

calender模块在​​很大程度上依赖于datetime模块,但通常会观察到“proleptic Gregorian”,它会在两个方向上无限延伸。

time模块同样对时间元组值中的年元素没有特别限制,并且仅使用自纪元以来的秒数来计算时间和日期。


话虽如此,在格里高利日历被采用之前,您无法在1582年2月12日左右之前可靠地处理日期。在那天之前,日期是使用各种位置相关的日历计算的,在标准python中没有支持。

答案 4 :(得分:0)

如果您使用import 'package:flutter/material.dart'; import 'package:pie_chart/pie_chart.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blueGrey, ), home: HomePage(), ); } } class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { bool toggle = true; Map<String, double> dataMap = new Map(); @override void initState() { super.initState(); dataMap.putIfAbsent("Food", () => 5); dataMap.putIfAbsent("Gas", () => 3); dataMap.putIfAbsent("Transportation", () => 2); dataMap.putIfAbsent("Games", () => 2); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Pie Chart"), ), body: Container( child: Center( child: toggle ? PieChart( dataMap: dataMap, legendFontColor: Colors.blueGrey[900], legendFontSize: 14.0, legendFontWeight: FontWeight.w500, animationDuration: Duration(milliseconds: 800), chartLegendSpacing: 32.0, chartRadius: MediaQuery.of(context).size.width / 2.7, showChartValuesInPercentage: true, showChartValues: true, chartValuesColor: Colors.blueGrey[900].withOpacity(0.9), ) : Text("Press FAB to show chart"), ), ), floatingActionButton: FloatingActionButton( onPressed: add, child: Icon(Icons.insert_chart), ), ); } void togglePieChart() { setState(() { toggle = !toggle; }); } void add(){ setState(() { dataMap["Food"]++; debugPrint(dataMap["Food"].toString()); }); } } 模块,则不能保证,因为它遵循平台上的C库函数,可以处理不同的最小和最大时间。 https://docs.python.org/3/library/time.html声明:

  

此模块中定义的大多数函数都调用具有相同名称的平台C库函数。有时参考平台文档可能会有所帮助,因为这些功能的语义在平台之间会有所不同。

https://docs.python.org/3/library/time.html#time.mktime状态:

  

它可以生成时间的最早日期取决于平台。

这是因为这些函数按照C11标准获取或返回time值:

  

time_tclock_t中可表示的时间范围和精度为   实现定义的。

time_t模块不同,datetime模块不会公开任何指示其支持的最小值和最大值的常量,因此,如果您确实需要找到平台的最小值和最大值,则可以d需要编写一些代码以在运行时通过实验找到它们,例如使用exponential search