digitalmars.D.learn - date and time
- Joel Christensen (4/4) Sep 25 2010 I'm using D2.049. I have a program in which I want to be able to get the...
- Yao G. (6/11) Sep 25 2010 std.datetime is your friend.
- Joel Christensen (8/10) Sep 25 2010 I've tried that module.
- Jonathan M Davis (16/27) Sep 25 2010 std.date is definitely broken. Some of it works, much doesn't. It is goi...
- Joel Christensen (8/8) Sep 25 2010 Thanks for the replies Jonathan M Davis and Yao G. :-)
- Jonathan M Davis (16/28) Sep 25 2010 If you want to use it, just import it. e.g. import core.sys.posix.time; ...
- Joel Christensen (3/3) Sep 25 2010 Thanks Jonathan. My plan is to use the C version, and not use the big
- Jonathan M Davis (9/12) Sep 25 2010 Well, std.stdio will give you a way to read binary files, so you can use...
- Joel Christensen (7/7) Sep 26 2010 Thanks for your reply Jonathan. Yes, I heard about stream being
- Jonathan M Davis (19/25) Sep 26 2010 You'll be able to do a lot more with stuff like std.algorithm if you hav...
- Joel Christensen (6/6) Sep 26 2010 Thanks again for the reply Jonathan. I'm using doublely linked list I
- bearophile (9/15) Sep 26 2010 I am looking for use cases of singly|doubly linked lists, I (nearly) nev...
- Joel Christensen (14/20) Sep 26 2010 Thanks for your interest bearophile.
- bearophile (4/6) Sep 26 2010 I see, then use a dynamic array, plus append, and few functions like rem...
- Joel Christensen (3/3) Sep 26 2010 I normally use D's built in dynamic arrays. but it doesn't work with
- Jonathan M Davis (39/42) Sep 26 2010 I would point out to you that Bearophile seems strongly opposed to linke...
- bearophile (5/6) Sep 26 2010 This is a long story, and I don't have time now, I am sorry. Something r...
- Joel Christensen (7/7) Sep 26 2010 Thanks for the long winded reply Jonathan.
- Denis Koroskin (5/8) Sep 27 2010 That's called intrusive linked list, and I find using it quite viable:
- Joel Christensen (2/5) Sep 27 2010 That's for the info Denis. I got the idea from a friend who is
- Steven Schveighoffer (12/18) Sep 27 2010 Not sure if dcollections could be of use:
- Johannes Pfau (9/16) Sep 27 2010 Yao has a nice ddoc template for D2. See for example
- Steven Schveighoffer (15/29) Sep 27 2010 Thanks,
- Yao G. (10/13) Sep 27 2010 To be honest, I don't like it either :) I plan to improve it, and by
- Yao G. (11/17) Sep 27 2010 That ddoc file is in, let's say, experimental stage, and I had to make
I'm using D2.049. I have a program in which I want to be able to get the current time as one number, also be able to change the hour and stuff then convert it back to one number. I'm saving just the one number to file. Thanks in advance. :-)
Sep 25 2010
On Sat, 25 Sep 2010 18:47:39 -0500, Joel Christensen <joelcnz gmail.com> wrote:I'm using D2.049. I have a program in which I want to be able to get the current time as one number, also be able to change the hour and stuff then convert it back to one number. I'm saving just the one number to file. Thanks in advance. :-)std.datetime is your friend. http://www.digitalmars.com/d/2.0/phobos/std_date.html -- Yao G.
Sep 25 2010
I've tried that module. I was putting: long dt = UTCtoLocalTime(getUTCtime - (msPerDay / 2)); Then when daylight savings came it was wrong, (computer was right mind). long datetime = UTCtoLocalTime(getUTCtime); It is 1 hour and half a day out. It was the right hour till daylight savings. I live in New Zealand. Some one said that module was a mine field.std.datetime is your friend. http://www.digitalmars.com/d/2.0/phobos/std_date.html
Sep 25 2010
On Saturday 25 September 2010 17:48:54 Joel Christensen wrote:I've tried that module. I was putting: long dt = UTCtoLocalTime(getUTCtime - (msPerDay / 2)); Then when daylight savings came it was wrong, (computer was right mind). long datetime = UTCtoLocalTime(getUTCtime); It is 1 hour and half a day out. It was the right hour till daylight savings. I live in New Zealand. Some one said that module was a mine field.std.date is definitely broken. Some of it works, much doesn't. It is going to be replaced by std.datetime which will have much better functionality for both times and dates, but that hasn't been finished yet. Both Yao G. and I are working on implementations which are going to be reviewed for possible inclusion in phobos as std.datetime, and we're getting close to being done, but as I said, it's not finished yet. So, your best bet is to either mess around with std.date and figure out if you can get the functionality you need to work one way or another (I think that I ended up only ever using UTC in my code that used std.date since I couldn't get it to properly print local time), or you can use the C API directly: http://www.cppreference.com/wiki/c/date/start I believe that core.sys.posix.time.d already has the appropriate prototypes for them in D (on posix systems at least). - Jonathan M Davis
Sep 25 2010
Thanks for the replies Jonathan M Davis and Yao G. :-) Good to hear it's being worked on. I've other programs that are done with D1.0 that are all right. I'm using Windows, would like it to work on Linux too though. I think I'll use year month etc. separately instead of just having a big number (for converting to the time measurements). How do you access the core library? I wanted to look at the core time module and couldn't, (C/C++ sites of course have that information any way).
Sep 25 2010
On Saturday 25 September 2010 21:37:30 Joel Christensen wrote:Thanks for the replies Jonathan M Davis and Yao G. :-) Good to hear it's being worked on. I've other programs that are done with D1.0 that are all right. I'm using Windows, would like it to work on Linux too though. I think I'll use year month etc. separately instead of just having a big number (for converting to the time measurements). How do you access the core library? I wanted to look at the core time module and couldn't, (C/C++ sites of course have that information any way).If you want to use it, just import it. e.g. import core.sys.posix.time; I don't see a corresponding set of definitons for Windows though, for some reason - I have no idea why. If you want to look at the code, then look look in your dmd directory. It's in src/druntime/src/. core.sys.posix.time is src/druntime/src/core/sys/posix/time.d. From the little I've look at core though, the system stuff really isn't documented. It's pretty much just including proper declarations for C system stuff and giving a way for your to access it without directly putting the C declarations in your code yourself. It also deals with some of the differences on platforms, which can prove to be quite annoying - even among posix implementations. Of course, the stuff you're looking for is standard C stuff, so you could just do it yourself directly - all it really requires is the function declarations. Check out http://www.digitalmars.com/d/2.0/interfaceToC.html for more details. - Jonathan M Davis
Sep 25 2010
Thanks Jonathan. My plan is to use the C version, and not use the big time_t number. I'm actually using std.c.stdio module too, for binary files, I probably should use std.stream or some thing.
Sep 25 2010
On Saturday 25 September 2010 22:40:39 Joel Christensen wrote:Thanks Jonathan. My plan is to use the C version, and not use the big time_t number. I'm actually using std.c.stdio module too, for binary files, I probably should use std.stream or some thing.Well, std.stdio will give you a way to read binary files, so you can use that, but you should probably avoid std.stream. As far as I know, it works just fine, but it's scheduled for deprecation as soon as a replacement has been decided on. std.stream is not range-based, and the phobos developers what streams in phobos to be range-based, so they plan to replace std.stream, but they're still trying to figure out what the best design for the the new std.stream should be, and so I have no idea when it'll actually be replaced. - Jonathan M Davis
Sep 25 2010
Thanks for your reply Jonathan. Yes, I heard about stream being replaced, but since my code with binary files isn't very much, I can just redo it if I have to. I think I'll continue using std.c.file for the time being. I should learn about ranges. I tried std.stdio already. It's been been good getting replies here. :-)
Sep 26 2010
On Sunday 26 September 2010 00:23:23 Joel Christensen wrote:Thanks for your reply Jonathan. Yes, I heard about stream being replaced, but since my code with binary files isn't very much, I can just redo it if I have to. I think I'll continue using std.c.file for the time being. I should learn about ranges.You'll be able to do a lot more with stuff like std.algorithm if you have a good understanding of ranges (I should also note that std.algorithm is a prime example of why auto is such a good thing - you do _not_ want to have to use all of the specific return types in std.algorithm directly). This article by Andrei would be a good place to start: http://www.informit.com/articles/article.aspx?p=1407357 There's also this presentation that he did on ranges at BoostCon 2009: http://blip.tv/file/2432106 They require you to think differently about some things, but for a lot of stuff, it can be very powerful and much simpler to do. One really cool thing is that you can process a range pretty much like you'd process an slist in a functional language like lisp or Haskell (you can use front and popFront() very similarly to how head/car and tail/cdr are used in function languages). I really love ranges, but they can take some getting used to. A lot of folks seme to react fairly negatively to them intially, but once you've messed with them a bit, you'll probably agree that in most cases, they're at least as good if not superior to iterators. - Jonathan M Davis
Sep 26 2010
Thanks again for the reply Jonathan. I'm using doublely linked list I made for a game where ships and there lazer bolts are in the same list. Without linked list I couldn't do things like create a lazer bolt or remove one while trans-versing the linked list. I had to use my own linked list, having a next and prev node in each object that goes in the list.
Sep 26 2010
Joel Christensen:Thanks again for the reply Jonathan. I'm using doublely linked list I made for a game where ships and there lazer bolts are in the same list. Without linked list I couldn't do things like create a lazer bolt or remove one while trans-versing the linked list. I had to use my own linked list, having a next and prev node in each object that goes in the list.I am looking for use cases of singly|doubly linked lists, I (nearly) never need them in my code. Few questions: 1) What's a typical (or average) length of your list? 2) Are items sorted (like from the bigger to the smaller one)? 3) Is the item order important (so is it OK to shuffle them in some other ways)? 4a) How often/many do you need to add items to the list? 4b) How often/many do you need to remove items to the list? Bye, bearophile
Sep 26 2010
I am looking for use cases of singly|doubly linked lists, I (nearly) never need them in my code. Few questions: 1) What's a typical (or average) length of your list?Thanks for your interest bearophile. I haven't used linked list much more than just trying them out. And my game is at its earlier stages. Not very much, 2 players, mines ad lazer bolts are added and removed when used. I guess around 10.2) Are items sorted (like from the bigger to the smaller one)?I've got the player objects fixed at the head of the array.3) Is the item order important (so is it OK to shuffle them in some other ways)?I'm thinking of having then sorted as objects are added. I'm also thinking of having a pointer to the start and end of each kind of object (like sub lists).4a) How often/many do you need to add items to the list?My game is only small at the moment, so not a good sample. I guess every time a player fires a lazer bolt or lays a mine, but those objects don't last long.4b) How often/many do you need to remove items to the list?About as often as I add them, eg. the mines and lazers are added and taken away often. How many, two at a about the same time with two players.
Sep 26 2010
Joel Christensen:Not very much, 2 players, mines ad lazer bolts are added and removed when used. I guess around 10.I see, then use a dynamic array, plus append, and few functions like remove. It's faster and simpler. In most situations today (in a language that allows mutability) linked lists are the wrong data structure to use. Bye, bearophile
Sep 26 2010
I normally use D's built in dynamic arrays. but it doesn't work with adding and removing with the foreach loop (like removing an object from the list while still going through the list).
Sep 26 2010
On Sunday 26 September 2010 11:38:35 Joel Christensen wrote:I normally use D's built in dynamic arrays. but it doesn't work with adding and removing with the foreach loop (like removing an object from the list while still going through the list).I would point out to you that Bearophile seems strongly opposed to linked lists in general and seems to point out to people that arrays and vector/ArrayList types (Array in std.container) are faster on modern hardware whenever they come up. I can only assume that it's one of his pet peeves (we all have them - for instance, I hate it when people use post-increment or pos-decrement for instance when pre-increment or pre-decrement will do), but I don't think that he's necessarily right. Classicly in computer science, if you have a data structure which you're going to be doing a lot of appending to, prepending to, or inserting into, you use a linked list. std.container currently has SList, which is a singly-linked list but no doubly-linked list. However, they don't have random access and they take up more memory than an array or an Array (thanks to all of those prev and next pointers). Bearophile objects to them, I believe, because they aren't a single block of memory and so they harm cache locality, resulting in poorer cache performance from the CPU. He may very well be right (in fact on some level, I'm sure he is), but that's the sort of thing that most people worry about when they find that their data structure has poor performance rather than reacting negatively to any suggestion of using a linked list. Whether using a linked list is the best choice for your application, I don't know, but it is often the case that you can do the job just as well or better with an Array, tree, or hash table, depending on what you're trying to do and how you're trying to do it. However, if you constantly adding and removing from a container (especially if you're doing it anywhere other than the end), and you rely on insertion order (so you can't use a hash table) rather than sorted order (like you would with a tree), then a linked list is likely the best choice. It has cheap insertions and removals. Certainly, in D, I would avoid having lots of appending to and removal from the end of dynamic arrays in your code because the GC isn't efficient enough and that's going to result in a lot of allocations and deallocations, but Array should solve that problem for the most part, since it uses an internal array which is larger than the Array's length so that it can reduce how often reallocation occurs (and if you've removed from the end, then it has more room for adding more to the end, so it shouldn't have the same problem as a built-in array). In any case, from your description of having to remove from the middle of a list would indicate that a linked list is probably the best for what you're doing, but not knowing in detail, I'm obviously not in the best place to judge. - Jonathan M Davis
Sep 26 2010
Jonathan M Davis:I can only assume that it's one of his pet peeves (we all have them -This is a long story, and I don't have time now, I am sorry. Something related: http://tinyurl.com/3yrawox Bye, bearophile
Sep 26 2010
Thanks for the long winded reply Jonathan. I don't know how to avoid using my own linked list, I have next/prev in each class (Ball, Lazer and Mine ) in the list. Thanks bearophile, I had a bit of a look at that site. My game is simple so just maybe the easiest way is the way to go, though if I use the most tightest way and so my game would be an prototype for bigger games to reference.
Sep 26 2010
On Mon, 27 Sep 2010 10:27:36 +0400, Joel Christensen <joelcnz gmail.com> wrote:Thanks for the long winded reply Jonathan. I don't know how to avoid using my own linked list, I have next/prev in each class (Ball, Lazer and Mine ) in the list.That's called intrusive linked list, and I find using it quite viable: zero-allocation O(1) add/removal is a very strong characteristics. They are very useful especially for lock-free algorithms.
Sep 27 2010
That's called intrusive linked list, and I find using it quite viable: zero-allocation O(1) add/removal is a very strong characteristics. They are very useful especially for lock-free algorithms.That's for the info Denis. I got the idea from a friend who is interested in how to make games.
Sep 27 2010
On Sun, 26 Sep 2010 04:38:36 -0400, Joel Christensen <joelcnz gmail.com> wrote:Thanks again for the reply Jonathan. I'm using doublely linked list I made for a game where ships and there lazer bolts are in the same list. Without linked list I couldn't do things like create a lazer bolt or remove one while trans-versing the linked list. I had to use my own linked list, having a next and prev node in each object that goes in the list.Not sure if dcollections could be of use: http://www.dsource.org/projects/dcollections And the linked list class: http://www.dsource.org/projects/dcollections/browser/branches/d2/dcollections/LinkList.d One thing my lib supports is removal while traversing via foreach. See the purge function. Sorry about lack of online docs, I need to figure out how to automatically generate them (the D1 docs are auto-generated, but I haven't put in any time to figure out how to generate the D2 version). -Steve
Sep 27 2010
On 27.09.2010 14:01, Steven Schveighoffer wrote:Sorry about lack of online docs, I need to figure out how to automatically generate them (the D1 docs are auto-generated, but I haven't put in any time to figure out how to generate the D2 version). -SteveYao has a nice ddoc template for D2. See for example http://d.yao.com.mx/datetime/core.html The ddoc file is available here: https://bitbucket.org/gomez/yao-library/src/da11956a6a6e/docs/ but I don't know about the license for that file, you might have to ask him about that. This doesn't generate an index though, if you meant that. -- Johannes Pfau
Sep 27 2010
On Mon, 27 Sep 2010 08:34:57 -0400, Johannes Pfau <spam example.com> wrote:On 27.09.2010 14:01, Steven Schveighoffer wrote:Thanks, Yao's seems similar to Phobos, which I'm not a big fan of. Particularly the munged-together list of constructs/functions at the top. I used Tango's (old) doc generation templates to generate the D1 docs, and Brad of dsource set up my project to rebuild the D1 docs on every checkin. However, I don't think he's set up a D2 compiler, and even if he did, it's changing so frequently that he'd have to update it too often. I dumped the Tango doc templates for the D2 version, and I want to rewrite them, but I just haven't had the time. In particular, I want a categorical index at the top or on the side (i.e. functions, members, etc.) Having everything munged together is super-confusing. I really like the dil-generated docs that Tango uses, but I'm pretty sure dil isn't D2... -SteveSorry about lack of online docs, I need to figure out how to automatically generate them (the D1 docs are auto-generated, but I haven't put in any time to figure out how to generate the D2 version). -SteveYao has a nice ddoc template for D2. See for example http://d.yao.com.mx/datetime/core.html The ddoc file is available here: https://bitbucket.org/gomez/yao-library/src/da11956a6a6e/docs/ but I don't know about the license for that file, you might have to ask him about that. This doesn't generate an index though, if you meant that.
Sep 27 2010
On Mon, 27 Sep 2010 07:46:49 -0500, Steven Schveighoffer <schveiguy yahoo.com> wrote:Thanks, Yao's seems similar to Phobos, which I'm not a big fan of. Particularly the munged-together list of constructs/functions at the top.To be honest, I don't like it either :) I plan to improve it, and by improve it I mean to remove that cloud-like unordered list of symbols, and use a tree or something similar. CandyDoc sometimes hangs Opera, so I wanted to make a quick replacement, that also worked well without JavaScript. Maybe I'll switch to Kandil or just use the doc generator of Dil. -- Yao G.
Sep 27 2010
On Mon, 27 Sep 2010 07:34:57 -0500, Johannes Pfau <spam example.com> wrote:Yao has a nice ddoc template for D2. See for example http://d.yao.com.mx/datetime/core.html The ddoc file is available here: https://bitbucket.org/gomez/yao-library/src/da11956a6a6e/docs/ but I don't know about the license for that file, you might have to ask him about that. This doesn't generate an index though, if you meant that.That ddoc file is in, let's say, experimental stage, and I had to make some "hacks" to make the generated docs pass the HTML4 validator (see for example the UL or the D_CODE macros). They don't have licence because I didn't find an equivalent to the Boost Licence but for documentation, but they can be used freely for whatever need you have. I still have to make some improvements, for example create a tree of symbols, like the one in Kandil or CandyDoc. -- Yao G.
Sep 27 2010